1000
It is possible to search for an item ( inside the Editor ), case insensitive

OBJECT editor,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
editor = _ObjectGetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "DropDownList") , "Editor");
	_ObjectSetProperty( editor , "EditType", 3);
	_ObjectCallMethod( editor , "AddItem", 1,"One");
	_ObjectCallMethod( editor , "AddItem", 2,"Two");
	_ObjectCallMethod( editor , "AddItem", 3,"Three");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", _ObjectCallMethod(grid, "ExecuteTemplate", ".Columns.Item(0).Editor.FindItem(`>ONE`)"));
	_ObjectCallMethod( items , "AddItem", _ObjectCallMethod(grid, "ExecuteTemplate", ".Columns.Item(0).Editor.FindItem(`>ThRee`)"));
	_ObjectCallMethod( items , "AddItem", _ObjectCallMethod(grid, "ExecuteTemplate", ".Columns.Item(0).Editor.FindItem(`ONE`)"));
	_ObjectCallMethod( items , "AddItem", _ObjectCallMethod(grid, "ExecuteTemplate", ".Columns.Item(0).Editor.FindItem(`>tWo`)"));
_ObjectCallMethod( grid , "EndUpdate");

999
The text after the BR-tag is in same line as the text before the BR-tag (entire column)

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "DrawGridLines", 1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Default");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(16) = False");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "This is the first line.<br>This is the second line.");
	_ObjectCallMethod( items , "AddItem", "This is the first line.<br>This is the second line.");
	_ObjectCallMethod( items , "AddItem", "This is the first line.<br>This is the second line.");
_ObjectCallMethod( grid , "EndUpdate");

998
The text after the BR-tag is in same line as the text before the BR-tag (individual)

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "DrawGridLines", 1);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Default");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(AddItem(`This is the first line.<br>This is the second line.`),0) = 1");
	h = _ObjectCallMethod( items , "AddItem", "<b>This is the first line.<br>This is the second line.</b>");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(h,0) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellSingleLine(h,0) = False");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(AddItem(`This is the first line.<br>This is the second line.`),0) = 1");
_ObjectCallMethod( grid , "EndUpdate");

997
Can I disable an item once the user selects a new value into a different item

// Change event - Occurs when the user changes the cell's content.
FUNCTION gridEvents_Change(OBJECT grid, INT Item, INT ColIndex, VARIANT NewValue)
	OBJECT items;
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.EnableItem(ItemByIndex(1)) = NewValue");
END

OBJECT editor,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "FreezeEvents", -1);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ScrollBySingleLine", -1);
_ObjectSetProperty( grid , "DrawGridLines", -2);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Q");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "A");
items = _ObjectGetProperty( grid , "Items");
	h1 = _ObjectCallMethod( items , "AddItem", "What's your gender?");
	editor = _ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellEditor(h1,1)");
		_ObjectSetProperty( editor , "EditType", 3);
		_ObjectCallMethod( editor , "AddItem", 1,"Male");
		_ObjectCallMethod( editor , "AddItem", 0,"Female");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h1")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h1)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h1,1) = 1");
	h2 = _ObjectCallMethod( items , "AddItem", "What's pet name?");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h2")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h2)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h2,1) = `This is my pet favorite long long long name, that shoul break the line in multiple pieces`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellSingleLine(h2,1) = False");
_ObjectCallMethod( grid , "EndUpdate");
_ObjectCallMethod( grid , "FreezeEvents", 0);

996
How can I get a row expanded / enlarged to fit the cell's text (entire column)

OBJECT column,editor,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ScrollBySingleLine", -1);
_ObjectSetProperty( grid , "DrawGridLines", -2);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Q");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "A");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(16) = False");
	editor = _ObjectGetProperty( column , "Editor");
		_ObjectSetProperty( editor , "EditType", 5);
		_ObjectSetProperty( editor , "Appearance", 8);
items = _ObjectGetProperty( grid , "Items");
	h1 = _ObjectCallMethod( items , "AddItem", "What's name?");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h1")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h1)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h1,1) = `This is my pet favorite long long long name, that shoul break the line in multiple pieces`");
	h2 = _ObjectCallMethod( items , "AddItem", "What's your pet name?");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h2")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h2)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h2,1) = `This is my pet favorite long long long name, that shoul break the line in multiple pieces`");
_ObjectCallMethod( grid , "EndUpdate");

995
How can I get a row expanded / enlarged to fit the cell's text (individual cell)

OBJECT editor,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ScrollBySingleLine", -1);
_ObjectSetProperty( grid , "DrawGridLines", -2);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Q");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "A");
items = _ObjectGetProperty( grid , "Items");
	h1 = _ObjectCallMethod( items , "AddItem", "What's name?");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h1")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h1)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h1,1) = `This is my pet favorite long long long name, that shoul break the line in multiple pieces`");
	h2 = _ObjectCallMethod( items , "AddItem", "What's your pet name?");
	editor = _ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellEditor(h2,1)");
		_ObjectSetProperty( editor , "EditType", 5);
		_ObjectSetProperty( editor , "Appearance", 8);
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h2")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h2)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h2,1) = `This is my pet favorite long long long name, that shoul break the line in multiple pieces`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellSingleLine(h2,1) = False");
_ObjectCallMethod( grid , "EndUpdate");

994
InsertControlItem / UserEditor / A2X:

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "BackColor", 15790320);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "1 = 1") , "Bold", -1);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Type") , "Alignment", 2);
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "1. A ProgID such as ^"MSCAL.Calendar.7^"");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(h) = 0");
	hX = _ObjectCallMethod( items , "InsertControlItem", 0,"MSCAL.Calendar","");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,hX")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", hX)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemObject(hX).BackColor = 16777215");
	h = _ObjectCallMethod( items , "AddItem", "2. A CLSID such as ^"{0036F83C-D892-4B7B-AA0B-BEDD8D16A738}^"");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(h) = 0");
	hX = _ObjectCallMethod( items , "InsertControlItem", 0,"{0036F83C-D892-4B7B-AA0B-BEDD8D16A738}","");
	h = _ObjectCallMethod( items , "AddItem", "3. A URL such as ^"http://www.exontrol.com^"");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(h) = 0");
	hX = _ObjectCallMethod( items , "InsertControlItem", 0,"http://www.exontrol.com","");
	h = _ObjectCallMethod( items , "AddItem", "4. A reference to an Active document such as ^"file://\\Documents\MyDoc.doc^"");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(h) = 0");
	hX = _ObjectCallMethod( items , "InsertControlItem", 0,"file://C:\empesting.xml","");
	h = _ObjectCallMethod( items , "AddItem", "5.A fragment of HTML such as ^"MSHTML:<HTML><BODY>This is a line of text</BODY></HTML>^"");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(h) = 0");
	hX = _ObjectCallMethod( items , "InsertControlItem", 0,"MSHTML:<HTML><BODY>This is a <b>line of</b> text</BODY></HTML>","");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,hX")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", hX)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemHeight(hX) = 56");
	h = _ObjectCallMethod( items , "AddItem", "6.Anything, if it is preffixed by ^"A2X:^"");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(h) = 0");
	hX = _ObjectCallMethod( items , "InsertControlItem", 0,"A2X:TOC24.Toc24Ctrl.1","");
_ObjectCallMethod( grid , "EndUpdate");

993
How do I add a RichTextBox editor
// UserEditorOleEvent event - Occurs when an user editor fires an event.
FUNCTION gridEvents_UserEditorOleEvent(OBJECT grid, OBJECT Object, OBJECT Ev, INT CloseEditor, INT Item, INT ColIndex)
	Message( Ev );
END

OBJECT editor,grid,items,richtextbox;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "DrawGridLines", -1);
_ObjectSetProperty( grid , "DefaultItemHeight", 32);
editor = _ObjectGetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "RICHTEXT") , "Editor");
	_ObjectSetProperty( editor , "EditType", 16);
	_ObjectCallMethod( editor , "UserEditor", "RICHTEXT.RichtextCtrl","");
	richtextbox = _ObjectGetProperty( editor , "UserEditorObject");
		_ObjectSetProperty( richtextbox , "AutoVerbMenu", -1);
		_ObjectSetProperty( richtextbox , "TextRTF", "{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard\r\nThis is some {\b bold} text.\par\r\n}");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "RICHTEXT.RichtextCtrl");
_ObjectCallMethod( grid , "EndUpdate");

992
Is it possible to trap a double-click event on a specific cell and when that happens, to set the cell to a specific value
// DblClick event - Occurs when the user dblclk the left mouse button over an object.
FUNCTION gridEvents_DblClick(OBJECT grid, INT Shift, INT X, INT Y)
	_ObjectCallMethod(grid, "TemplatePut", "Dim c,hit")
	_ObjectCallMethod(grid, "TemplatePut", c)
	_ObjectCallMethod(grid, "TemplatePut", hit)
	h = _ObjectCallMethod(grid, "ExecuteTemplate", "ItemFromPoint(-1,-1,c,hit)");
	_ObjectCallMethod(grid, "TemplatePut", "Dim _ObObj,c,h")
	_ObjectCallMethod(grid, "TemplatePut", _ObjectGetProperty( grid , "Items"))
	_ObjectCallMethod(grid, "TemplatePut", c)
	_ObjectCallMethod(grid, "TemplatePut", h)
	Message( _ObjectCallMethod(grid, "ExecuteTemplate", "_ObObj.CellValue(h,c)") );
END

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HeaderAppearance", 4);
_ObjectSetProperty( grid , "DrawGridLines", -2);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C1");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C2");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 1`),1) = `Item 2`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 3`),1) = `Item 4`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 5`),1) = `Item 6`");
_ObjectCallMethod( grid , "EndUpdate");

991
How can I display dates in DD/MM/YYYY format

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ScrollBySingleLine", 0);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Date");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(AddItem(`Different Date Formats`)) = 0");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(AddItem(#12/1/1971#),0) = `((shortdateF(value) mid 4) left 2) + `/` + (shortdateF (value) left 2) + `/` + (shortdateF (value) right 4)`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(AddItem(#12/1/1971#),0) = `(1 array (0:=(shortdateF(value) split `/`))) + `/` + (0 array (=:0) ) + `/` + (2 array (=:0) )`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(AddItem(#12/1/1971#),0) = `((`0` + day(value) ) right 2) + `/` + ((`0` + month(value) ) right 2) + `/` + year(value)`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(AddItem(#12/1/1971#),0) = `day(value) + `/` + month(value) + `/` + year(value)`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(AddItem(#12/1/1971#),0) = `year(value) + ` - ` + day(value) + ` - ` + month(value)`");
	h = _ObjectCallMethod( items , "AddItem", #12/1/1971#);
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemHeight(h) = 24");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(h,0) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(h,0) = ``<b>` + year(value) + `</b><off -4> ` + day(value) + ` - ` + month(value)`");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(AddItem(`Predefined Date Formats`)) = 0");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(AddItem(#12/1/1971#),0) = `value`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(AddItem(#12/1/1971#),0) = `shortdateF(value)`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(AddItem(#12/1/1971#),0) = `shortdate(value)`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(AddItem(#12/1/1971#),0) = `longdate(value)`");
_ObjectCallMethod( grid , "EndUpdate");

990
I have noticed that the column gets resized once I release the mouse. I have a column that displays multiple-lines cells, and the text gets wrapped only when user releases the mouse. Is it possible to get resized contiguously as I had before
OBJECT grid;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ScrollBySingleLine", 0);
_ObjectSetProperty( grid , "DrawGridLines", 2);
_ObjectSetProperty( grid , "ColumnsAllowSizing", -1);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Add(`Column A (cont)`).Def(64) = True");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Column 1");
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Add(`Column B (cont)`).Def(64) = True");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Column 2");
_ObjectCallMethod( grid , "EndUpdate");

989
How do I get the column from cursor, when it hovers the empty portion of the items section
// MouseMove event - Occurs when the user moves the mouse.
FUNCTION gridEvents_MouseMove(OBJECT grid, INT Button, INT Shift, INT X, INT Y)
	_ObjectCallMethod(grid, "TemplatePut", "Dim c,hit")
	_ObjectCallMethod(grid, "TemplatePut", c)
	_ObjectCallMethod(grid, "TemplatePut", hit)
	i = _ObjectCallMethod(grid, "ExecuteTemplate", "ItemFromPoint(0,-1,c,hit)");
	Message( "Column" );
	Message( c );
END

OBJECT grid;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "DrawGridLines", 2);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Column 0");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Column 1");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Column 2");
_ObjectCallMethod( grid , "EndUpdate");

988
How do I add items once the user clicks the empty area
// Click event - Occurs when the user presses and then releases the left mouse button over the grid control.
FUNCTION gridEvents_Click()
	OBJECT items;
	_ObjectCallMethod(grid, "TemplatePut", "Dim c,hit")
	_ObjectCallMethod(grid, "TemplatePut", c)
	_ObjectCallMethod(grid, "TemplatePut", hit)
	i = _ObjectCallMethod(grid, "ExecuteTemplate", "ItemFromPoint(0,-1,c,hit)");
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,i")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", i)
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(i),1) = c");
END

OBJECT grid;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Number of Items to Add");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Click on Column");
_ObjectCallMethod( grid , "EndUpdate");

987
Is there any option to stop events
// AddItem event - Occurs after a new Item has been inserted to Items collection.
FUNCTION gridEvents_AddItem(OBJECT grid, INT Item)
	Message( "AddItem event is fired only if FreezeEvents(False) is called" );
END

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "FreezeEvents", -1);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "DefaultItemHeight", 24);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Task");
items = _ObjectGetProperty( grid , "Items");
	h1 = _ObjectCallMethod( items , "AddItem", "Task 1");
	h2 = _ObjectCallMethod( items , "AddItem", "Task 2");
_ObjectCallMethod( grid , "EndUpdate");
_ObjectCallMethod( grid , "FreezeEvents", 0);

986
How can I include the child items, when a filter is applied

OBJECT columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", -1);
_ObjectSetProperty( grid , "ContinueColumnScroll", 0);
_ObjectSetProperty( grid , "MarkSearchColumn", 0);
_ObjectSetProperty( grid , "SearchColumnIndex", 1);
_ObjectSetProperty( grid , "Indent", 16);
_ObjectSetProperty( grid , "LinesAtRoot", -1);
_ObjectSetProperty( grid , "FilterBarPromptVisible", 1);
_ObjectSetProperty( grid , "FilterBarPromptPattern", "Nancy");
_ObjectSetProperty( grid , "FilterInclude", 1);
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "Name") , "Width", 96);
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "Title") , "Width", 96);
	_ObjectCallMethod( columns , "Add", "City");
items = _ObjectGetProperty( grid , "Items");
	h0 = _ObjectCallMethod( items , "AddItem", "Nancy Davolio");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h0")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h0)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Sales Representative`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `Seattle`");
	h0 = _ObjectCallMethod( items , "InsertItem", h0,"","Andrew Fuller");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Vice President, Sales`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `Tacoma`");
	h0 = _ObjectCallMethod( items , "InsertItem", h0,"","Michael Suyama");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Sales Representative`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `London`");
	h0 = _ObjectCallMethod( items , "AddItem", "Janet Leverling");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Sales Representative`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `Kirkland`");
	h0 = _ObjectCallMethod( items , "InsertItem", h0,"","Margaret Peacock");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Sales Representative`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `Redmond`");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(0) = True");
_ObjectCallMethod( grid , "ApplyFilter");
_ObjectCallMethod( grid , "EndUpdate");

985
How do I prevent changing the cell's state ( check-box state )
// CellStateChanging event - Fired before cell's state is about to be changed.
FUNCTION gridEvents_CellStateChanging(OBJECT grid, INT Item, INT ColIndex, INT NewState)
	OBJECT items;
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,ColIndex,Item")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", ColIndex)
		_ObjectCallMethod(grid, "TemplatePut", Item)
		NewState = _ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellState(Item,ColIndex)");
END

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "LinesAtRoot", -1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "P1");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(0) = True");
	_ObjectSetProperty( column , "PartialCheck", -1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "P2");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(0) = True");
	_ObjectSetProperty( column , "PartialCheck", -1);
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 1");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 2");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(h) = True");
_ObjectCallMethod( grid , "EndUpdate");

984
How do I get sorted the column as string, numeric, date, date and time. Also how can it be applied to drop down filter panel

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Date");
	_ObjectSetProperty( column , "SortType", 2);
	_ObjectSetProperty( column , "DisplayFilterButton", -1);
	_ObjectSetProperty( column , "DisplayFilterPattern", 0);
	_ObjectSetProperty( column , "DisplayFilterDate", -1);
	_ObjectSetProperty( column , "FilterList", 1296);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "DateTime");
	_ObjectSetProperty( column , "SortType", 3);
	_ObjectSetProperty( column , "DisplayFilterButton", -1);
	_ObjectSetProperty( column , "DisplayFilterPattern", 0);
	_ObjectSetProperty( column , "FilterList", 1296);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Time");
	_ObjectSetProperty( column , "SortType", 4);
	_ObjectSetProperty( column , "DisplayFilterButton", -1);
	_ObjectSetProperty( column , "DisplayFilterPattern", 0);
	_ObjectSetProperty( column , "FilterList", 1296);
	_ObjectSetProperty( column , "FormatColumn", "time(value)");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Numeric");
	_ObjectSetProperty( column , "SortType", 1);
	_ObjectSetProperty( column , "DisplayFilterButton", -1);
	_ObjectSetProperty( column , "FilterList", 1296);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "String");
	_ObjectSetProperty( column , "DisplayFilterButton", -1);
	_ObjectSetProperty( column , "FilterList", 1296);
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", #1/27/2010#);
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = #1/27/2010 10:00:00 AM#");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = CellValue(h,1)");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,3) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,4) = CellValue(h,3)");
	h = _ObjectCallMethod( items , "AddItem", #1/27/2011#);
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = #1/27/2011 9:00:00 AM#");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = CellValue(h,1)");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,3) = 11");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,4) = CellValue(h,3)");
	h = _ObjectCallMethod( items , "AddItem", #11/2/2010#);
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = #11/2/2010 9:00:00 AM#");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = CellValue(h,1)");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,3) = 2");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,4) = CellValue(h,3)");
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(`DateTime`).DisplayFilterDate = False");
_ObjectCallMethod( grid , "EndUpdate");

983
I am using Layout property to sort multiple columns at once. The problem is that all items get expanded. How do I prevent that

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "LinesAtRoot", -1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "P1");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(0) = True");
	_ObjectSetProperty( column , "PartialCheck", -1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "P2");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(0) = True");
	_ObjectSetProperty( column , "PartialCheck", -1);
	_ObjectSetProperty( column , "FormatColumn", "1 index ``");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "InsertItem", h,"","Child A");
	_ObjectCallMethod( items , "InsertItem", h,"","Child B");
	_ObjectCallMethod( items , "InsertItem", h,"","Child A");
	_ObjectCallMethod( items , "InsertItem", h,"","Child B");
	_ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "AddItem", "Root");
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectSetProperty( grid , "Layout", "multiplesort=^"C0:1 C1:2^";collapse=^"^"");
_ObjectCallMethod( grid , "EndUpdate");

982
How do I find the cell's type, or what the cell holds

OBJECT columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "DrawGridLines", -2);
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "Value") , "Width", 24);
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "Type") , "FormatColumn", "type(%0)");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "TypeAsString") , "FormatColumn", "(0 := type(%0)) array (`empty`, `null`, `short`, `long`, `float`, `double`, `currency`, `date`, `string`, `object`, `error`, `b" +
	"oolean`, `variant`, `any`, `reserved`, `decimal`, `char`, `byte`, `unsigned short`, `unsigned long`, `long on 64 bits`)");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "Length") , "FormatColumn", "len(%0)");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", );
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(),0) = Me");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(),0) = True");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(),0) = -1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(),0) = -1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(),0) = #1/1/2001#");
_ObjectCallMethod( grid , "EndUpdate");

981
How can I get ride / hide the image being dragged by OLE Drag and Drop
// OLEStartDrag event - Occurs when the OLEDrag method is called.
FUNCTION gridEvents_OLEStartDrag(OBJECT grid, OBJECT Data, INT AllowedEffects)
	' Data.SetData("data to drag")
	AllowedEffects = 1;
END

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectSetProperty( grid , "OLEDropMode", 1);
_ObjectCallMethod(grid, "ExecuteTemplate", "Background(34) = 16777215");
_ObjectSetProperty( grid , "LinesAtRoot", -1);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Default");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 1");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 2");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(h) = True");

980
The ReadOnly property does not prevent changing the column's check-box (sample 2)

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ShowFocusRect", 0);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C1");
	_ObjectSetProperty( column , "AllowSizing", 0);
	_ObjectSetProperty( column , "Width", 18);
	_ObjectSetProperty( _ObjectGetProperty( column , "Editor") , "EditType", 19);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C2");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(0),1) = `Item 1`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(-1),1) = `Item 2`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(0),1) = `Item 3`");
_ObjectSetProperty( grid , "ReadOnly", -1);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(0).Editor.Option(17) = 2");
_ObjectCallMethod( grid , "EndUpdate");

979
The ReadOnly property does not prevent changing the column's check-box (sample 1)

OBJECT column,editor,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ShowFocusRect", 0);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C1");
	_ObjectSetProperty( column , "AllowSizing", 0);
	_ObjectSetProperty( column , "Width", 18);
	editor = _ObjectGetProperty( column , "Editor");
		_ObjectSetProperty( editor , "EditType", 19);
		_ObjectCallMethod(grid, "TemplatePut", "Dim ediObj")
		_ObjectCallMethod(grid, "TemplatePut", editor)
		_ObjectCallMethod(grid, "ExecuteTemplate", "ediObj.Option(17) = 1");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C2");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(0),1) = `Item 1`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(-1),1) = `Item 2`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(0),1) = `Item 3`");
_ObjectSetProperty( grid , "ReadOnly", -1);
_ObjectCallMethod( grid , "EndUpdate");

978
How can I export checked items only

OBJECT columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", columns)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Add(`C1`).Def(0) = True");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "C2") , "FormatColumn", "1 index `A-Z`");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "C3") , "FormatColumn", "100 index ``");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "Item 1");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellState(AddItem(`Item 2`)) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellState(AddItem(`Item 3`)) = 1");
_ObjectCallMethod( grid , "EndUpdate");
Message( "Export CSV Checked Items Only:" );
Message( _ObjectCallMethod( grid , "Export", "","chk") );

977
How can I export a hidden column

OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectCallMethod( columns , "Add", "C1");
	column = _ObjectCallMethod( columns , "Add", "C2");
		_ObjectSetProperty( column , "FormatColumn", "1 index `A-Z`");
		_ObjectSetProperty( column , "Visible", 0);
	column = _ObjectCallMethod( columns , "Add", "C3");
		_ObjectSetProperty( column , "FormatColumn", "100 index ``");
		_ObjectSetProperty( column , "Visible", 0);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "Item 1");
	_ObjectCallMethod( items , "AddItem", "Item 2");
	_ObjectCallMethod( items , "AddItem", "Item 3");
_ObjectCallMethod( grid , "EndUpdate");
Message( "Export CSV Hidden Columns (1,2):" );
Message( _ObjectCallMethod( grid , "Export", "","|1,2") );

976
I'm trying to use automatic numbering of the outline. How can I have A, B, C for root items, 1, 2, 3 for the sub-items, and a, b, c for sub-sub-items (sample 3)

OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "LinesAtRoot", -1);
_ObjectSetProperty( grid , "DrawGridLines", -2);
_ObjectSetProperty( grid , "AutoDrag", 3);
_ObjectSetProperty( grid , "HasLines", 1);
_ObjectSetProperty( grid , "Indent", 16);
_ObjectSetProperty( grid , "MarkSearchColumn", 0);
columns = _ObjectGetProperty( grid , "Columns");
	column = _ObjectCallMethod( columns , "Add", "");
		_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
		_ObjectCallMethod(grid, "TemplatePut", column)
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
		_ObjectSetProperty( column , "FormatColumn", "((1:=(0 :=(1 rpos '.|A-Z||a-z|')) rfind `.`) < 0 ? `<b>` + =:0 + `` :  (=:0 mid (1 + 1 + =:1) )  + `)` ) + ` ` + value");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
	hChild = _ObjectCallMethod( items , "InsertItem", h,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(0) = True");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
	hChild = _ObjectCallMethod( items , "InsertItem", h,"","Child");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,hChild")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", hChild)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellState(hChild,0) = 1");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
_ObjectCallMethod( grid , "EndUpdate");

975
I'm trying to use automatic numbering of the outline. How can I have A, B, C for root items, 1, 2, 3 for the sub-items, and a, b, c for sub-sub-items (sample 2)

OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "LinesAtRoot", -1);
_ObjectSetProperty( grid , "GridLineColor", 12500670);
_ObjectSetProperty( grid , "DrawGridLines", -2);
_ObjectSetProperty( grid , "AutoDrag", 3);
_ObjectSetProperty( grid , "HasLines", 1);
_ObjectSetProperty( grid , "Indent", 16);
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectCallMethod( columns , "Add", "Default");
	column = _ObjectCallMethod( columns , "Add", "");
		_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
		_ObjectCallMethod(grid, "TemplatePut", column)
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(49) = 4");
		_ObjectSetProperty( column , "AllowSizing", 0);
		_ObjectSetProperty( column , "Width", 36);
		_ObjectSetProperty( column , "Position", 0);
		_ObjectSetProperty( column , "FormatColumn", "(1:=(0 :=(1 rpos '.|A-Z||a-z|')) rfind `.`) < 0 ? `<b>` + =:0 : (`............` left 2 * (=:0 count `.`)) + (=:0 mid (1 + 1 + =" +
	":1) ) ");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
	hChild = _ObjectCallMethod( items , "InsertItem", h,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(0) = True");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
	hChild = _ObjectCallMethod( items , "InsertItem", h,"","Child");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,hChild")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", hChild)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellState(hChild,0) = 1");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
_ObjectCallMethod( grid , "EndUpdate");

974
I'm trying to use automatic numbering of the outline. How can I have A, B, C for root items, 1, 2, 3 for the sub-items, and a, b, c for sub-sub-items (sample 1)

OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "LinesAtRoot", -1);
_ObjectSetProperty( grid , "DrawGridLines", -2);
_ObjectSetProperty( grid , "AutoDrag", 3);
_ObjectSetProperty( grid , "HasLines", 1);
_ObjectSetProperty( grid , "Indent", 16);
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectCallMethod( columns , "Add", "Default");
	column = _ObjectCallMethod( columns , "Add", "");
		_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
		_ObjectCallMethod(grid, "TemplatePut", column)
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(49) = 4");
		_ObjectSetProperty( column , "Alignment", 2);
		_ObjectSetProperty( column , "AllowSizing", 0);
		_ObjectSetProperty( column , "Width", 24);
		_ObjectSetProperty( column , "Position", 0);
		_ObjectSetProperty( column , "FormatColumn", "(1:=(0 :=(1 rpos '.|A-Z||a-z|')) rfind `.`) < 0 ? `<b>` + =:0 : `<i>` + (=:0 mid (1 + 1 + =:1) ) ");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
	hChild = _ObjectCallMethod( items , "InsertItem", h,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(0) = True");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
	hChild = _ObjectCallMethod( items , "InsertItem", h,"","Child");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,hChild")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", hChild)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellState(hChild,0) = 1");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", hChild,"","Child");
	_ObjectCallMethod( items , "InsertItem", h,"","Child");
_ObjectCallMethod( grid , "EndUpdate");

973
How can I programmatically group by columns, without having the control's sort bar visible

OBJECT grid,rs;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "SortBarHeight", 0);
_ObjectSetProperty( grid , "SortBarVisible", -1);
_ObjectSetProperty( grid , "SortBarCaption", "Drag a <b>column</b> header here to group by that column.");
_ObjectSetProperty( grid , "AllowGroupBy", -1);
_ObjectSetProperty( grid , "Layout", "multiplesort=^"C1:2^"");
_ObjectCallMethod( grid , "EndUpdate");

972
How do I perform my own sort

// Sort event - Fired when the control sorts a column.
FUNCTION gridEvents_Sort()
	OBJECT items;
	Message( "Sort" );
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemPosition(ItemByIndex(1)) = 0");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemPosition(ItemByIndex(0)) = 1");
END

OBJECT columns,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectSetProperty( grid , "SortOnClick", 1);
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "Index") , "FormatColumn", "0 index ``");
	_ObjectCallMethod( columns , "Add", "Data 1");
	_ObjectCallMethod( columns , "Add", "Data 2");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", 0);
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = 2");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = 3");
	h = _ObjectCallMethod( items , "AddItem", 4);
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = 5");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = 6");
	h = _ObjectCallMethod( items , "AddItem", 7);
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = 8");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = 9");
_ObjectSetProperty( grid , "Layout", "multiplesort=^"C1:1 C2:2^"");
_ObjectCallMethod( grid , "EndUpdate");

971
Is it possible to have a different alignment for parts of the cell's caption

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "TreeColumnIndex", -1);
_ObjectSetProperty( grid , "DrawGridLines", -2);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Default");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(0) = True");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellHAlignment(AddItem(`all-left`),0) = 0");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellHAlignment(AddItem(`all-center`),0) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellHAlignment(AddItem(`all-right`),0) = 2");
	h = _ObjectCallMethod( items , "AddItem", "left<c>center<r>right");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(h,0) = 1");
_ObjectCallMethod( grid , "EndUpdate");

970
I have a column with Def(exCellSingleLine) property on False, word-wrapping, and I am wondering if possible to update the column's content while user is resizing it
OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
columns = _ObjectGetProperty( grid , "Columns");
	column = _ObjectCallMethod( columns , "Add", "MultipleLine");
		_ObjectSetProperty( column , "Width", 32);
		_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
		_ObjectCallMethod(grid, "TemplatePut", column)
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(16) = False");
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(64) = True");
	column = _ObjectCallMethod( columns , "Add", "SingleLine");
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(16) = False");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`This is a bit of long text that should break the line`),1) = `This is a bit of long text that should break the line`");
_ObjectCallMethod( grid , "EndUpdate");

969
How can I get the absolute position of an item
// MouseMove event - Occurs when the user moves the mouse.
FUNCTION gridEvents_MouseMove(OBJECT grid, INT Button, INT Shift, INT X, INT Y)
	OBJECT items;
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,c,hit")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", c)
		_ObjectCallMethod(grid, "TemplatePut", hit)
		Message( _ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellCaption(Me.ItemFromPoint(-1,-1,c,hit),`Position`)") );
END

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "BackColorAlternate", 15790320);
_ObjectSetProperty( grid , "LinesAtRoot", -1);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Def") , "DisplayFilterButton", -1);
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "InsertItem", _ObjectCallMethod( items , "InsertItem", h,"","Child 1"),"","Sub-Child 1");
	_ObjectCallMethod( items , "InsertItem", _ObjectCallMethod( items , "InsertItem", h,"","Child 2"),"","Sub-Child 2");
_ObjectCallMethod( grid , "PutItems", _ObjectCallMethod( grid , "GetItems", -1));
_ObjectCallMethod( grid , "PutItems", _ObjectCallMethod( grid , "GetItems", -1));
_ObjectCallMethod( grid , "PutItems", _ObjectCallMethod( grid , "GetItems", -1));
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position");
	_ObjectSetProperty( column , "FormatColumn", "1 apos ``");
	_ObjectSetProperty( column , "Visible", 0);
_ObjectCallMethod( grid , "EndUpdate");

968
I am using ExComboBox as an user editor, how can I display a different column

// UserEditorClose event - Fired the user editor is about to be opened.
FUNCTION gridEvents_UserEditorClose(OBJECT grid, OBJECT Object, INT Item, INT ColIndex)
	' Items.CellValue(Item,ColIndex) = Object.Value

END

// UserEditorOleEvent event - Occurs when an user editor fires an event.
FUNCTION gridEvents_UserEditorOleEvent(OBJECT grid, OBJECT Object, OBJECT Ev, INT CloseEditor, INT Item, INT ColIndex)
	Message( Ev );
END

// UserEditorOpen event - Occurs when an user editor is about to be opened.
FUNCTION gridEvents_UserEditorOpen(OBJECT grid, OBJECT Object, INT Item, INT ColIndex)
	' Object.Value = Me.Items.CellValue(Item,ColIndex)

END

OBJECT column,combobox,editor,grid,items,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
editor = _ObjectGetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Exontrol.ComboBox") , "Editor");
	_ObjectSetProperty( editor , "EditType", 16);
	_ObjectCallMethod( editor , "UserEditor", "Exontrol.ComboBox","");
	combobox = _ObjectGetProperty( editor , "UserEditorObject");
		_ObjectCallMethod( combobox , "BeginUpdate");
		_ObjectSetProperty( combobox , "Style", 2);
		_ObjectSetProperty( combobox , "ColumnAutoResize", 0);
		rs = CreateObject("ADOR.Recordset");
			_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
		_ObjectSetProperty( combobox , "DataSource", rs);
		_ObjectSetProperty( combobox , "Alignment", 0);
		_ObjectSetProperty( combobox , "IntegralHeight", -1);
		_ObjectSetProperty( combobox , "MinHeightList", 128);
		_ObjectSetProperty( combobox , "MinWidthList", 648);
		_ObjectSetProperty( combobox , "HeaderHeight", 36);
		_ObjectSetProperty( combobox , "AllowSizeGrip", -1);
		_ObjectSetProperty( combobox , "SingleEdit", -1);
		_ObjectSetProperty( combobox , "LabelColumnIndex", 7);
		_ObjectSetProperty( combobox , "SearchColumnIndex", 0);
		column = _ObjectCallMethod(grid, "ExecuteTemplate", "comObj.Columns.Item(0)");
			_ObjectSetProperty( column , "HeaderBold", -1);
			_ObjectSetProperty( column , "HTMLCaption", "OrderID<br><fgcolor=808080>(search)");
		column = _ObjectCallMethod(grid, "ExecuteTemplate", "comObj.Columns.Item(7)");
			_ObjectSetProperty( column , "HeaderBold", -1);
			_ObjectSetProperty( column , "HTMLCaption", "ShipName<br><fgcolor=808080>(display)");
			_ObjectSetProperty( column , "Width", 128);
		_ObjectSetProperty( combobox , "UseTabKey", 0);
		_ObjectCallMethod( combobox , "EndUpdate");
_ObjectSetProperty( grid , "DrawGridLines", -2);
_ObjectSetProperty( grid , "DefaultItemHeight", 21);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellEditorVisible(AddItem(10248),0) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellEditorVisible(AddItem(10249),0) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellEditorVisible(AddItem(10250),0) = 1");
_ObjectCallMethod( grid , "EndUpdate");

967
How do I sort the index column as numeric (Method 3)

// AddItem event - Occurs after a new Item has been inserted to Items collection.
FUNCTION gridEvents_AddItem(OBJECT grid, INT Item)
	OBJECT items;
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,Item")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", Item)
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellData(Item,1) = CellCaption(Item,1)");
END

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "DrawGridLines", -1);
_ObjectSetProperty( grid , "ColumnAutoResize", -1);
_ObjectSetProperty( grid , "ShowFocusRect", 0);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Next");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(48) = 4");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(52) = 4");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Index");
	_ObjectSetProperty( column , "AllowSizing", 0);
	_ObjectSetProperty( column , "Width", 48);
	_ObjectSetProperty( column , "FormatColumn", "(((0 := (1 index ``)) mod 3) case ( default: ``; 0 : `<r><fgcolor=B0B0B0>`; 1: ``; 2 : `<c><fgcolor=808080>` )) + str(=:0)");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
	_ObjectSetProperty( column , "SortType", 5);
	_ObjectSetProperty( column , "Position", 0);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "Item 1");
	_ObjectCallMethod( items , "AddItem", "Item 2");
	_ObjectCallMethod( items , "AddItem", "Item 3");
	_ObjectCallMethod( items , "AddItem", "Item 4");
	_ObjectCallMethod( items , "AddItem", "Item 5");
	_ObjectCallMethod( items , "AddItem", "Item 6");
	_ObjectCallMethod( items , "AddItem", "Item 7");
	_ObjectCallMethod( items , "AddItem", "Item 8");
	_ObjectCallMethod( items , "AddItem", "Item 9");
	_ObjectCallMethod( items , "AddItem", "Item 10");
_ObjectCallMethod( grid , "EndUpdate");

966
How do I sort the index column as numeric (Method 2)

// AddItem event - Occurs after a new Item has been inserted to Items collection.
FUNCTION gridEvents_AddItem(OBJECT grid, INT Item)
	OBJECT items;
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,Item")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", Item)
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellSortData(Item,1) = CellCaption(Item,1)");
END

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "DrawGridLines", -1);
_ObjectSetProperty( grid , "ColumnAutoResize", -1);
_ObjectSetProperty( grid , "ShowFocusRect", 0);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Next");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(48) = 4");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(52) = 4");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Index");
	_ObjectSetProperty( column , "AllowSizing", 0);
	_ObjectSetProperty( column , "Width", 48);
	_ObjectSetProperty( column , "FormatColumn", "(((0 := (1 index ``)) mod 3) case ( default: ``; 0 : `<r><fgcolor=B0B0B0>`; 1: ``; 2 : `<c><fgcolor=808080>` )) + str(=:0)");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
	_ObjectSetProperty( column , "SortType", 6);
	_ObjectSetProperty( column , "Position", 0);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "Item 1");
	_ObjectCallMethod( items , "AddItem", "Item 2");
	_ObjectCallMethod( items , "AddItem", "Item 3");
	_ObjectCallMethod( items , "AddItem", "Item 4");
	_ObjectCallMethod( items , "AddItem", "Item 5");
	_ObjectCallMethod( items , "AddItem", "Item 6");
	_ObjectCallMethod( items , "AddItem", "Item 7");
	_ObjectCallMethod( items , "AddItem", "Item 8");
	_ObjectCallMethod( items , "AddItem", "Item 9");
	_ObjectCallMethod( items , "AddItem", "Item 10");
_ObjectCallMethod( grid , "EndUpdate");

965
How do I sort the index column as numeric (Method 1)

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Sort Index As String (Default)");
	_ObjectSetProperty( column , "FormatColumn", "1 index ``");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Sort Index As Numeric");
	_ObjectSetProperty( column , "ComputedField", "%C0");
	_ObjectSetProperty( column , "SortType", 1);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
_ObjectCallMethod( grid , "EndUpdate");

964
How can I put icons/images into buttons

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", -1);
_ObjectCallMethod( grid , "Images", "gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTq" +
	"lVq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m" +
	"0ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/y" +
	"NAOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C+B");
	_ObjectSetProperty( column , "AllowSizing", 0);
	_ObjectSetProperty( column , "Width", 48);
	_ObjectSetProperty( column , "FormatColumn", "` <img>` + ( 1 + (1 index ``) mod 3 ) + `</img> `");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(0) = True");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(2) = True");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(3) = True");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "");
_ObjectSetProperty( grid , "DrawGridLines", 2);
_ObjectSetProperty( grid , "DefaultItemHeight", 20);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
_ObjectCallMethod( grid , "EndUpdate");

963
Is it possible to have a CheckBox and Button TOGETHER on all cells in a column

// ButtonClick event - Occurs when user clicks on the cell's button.
FUNCTION gridEvents_ButtonClick(OBJECT grid, INT Item, INT ColIndex, VARIANT Key)
	Message( "ButtonClick" );
	Message( Item );
	Message( Key );
END

// CellStateChanged event - Fired after cell's state has been changed.
FUNCTION gridEvents_CellStateChanged(OBJECT grid, INT Item, INT ColIndex)
	Message( "CellStateChanged" );
	Message( Item );
END

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", -1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "");
	_ObjectSetProperty( column , "AllowSizing", 0);
	_ObjectSetProperty( column , "Width", 32);
	_ObjectSetProperty( column , "FormatColumn", "1 index ``");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Def");
	_ObjectSetProperty( column , "AllowSizing", 0);
	_ObjectSetProperty( column , "Width", 48);
	_ObjectSetProperty( column , "FormatColumn", "`     `");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(0) = True");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(2) = True");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(3) = True");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
_ObjectCallMethod( grid , "EndUpdate");

962
I have columns that look up the same data. (e.g. different contact) so both could / should use the same editor. Is this possible, to use other column's editor

OBJECT column,columns,grid,items,var_editor;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "SelBackColor", _ObjectGetProperty( grid , "BackColor"));
_ObjectSetProperty( grid , "SelForeColor", _ObjectGetProperty( grid , "ForeColor"));
columns = _ObjectGetProperty( grid , "Columns");
	column = _ObjectCallMethod( columns , "Add", "Pos");
		_ObjectSetProperty( column , "Width", 32);
		_ObjectSetProperty( column , "AllowSizing", 0);
		_ObjectSetProperty( column , "FormatColumn", "1 index ``");
	var_Editor = _ObjectGetProperty( _ObjectCallMethod( columns , "Add", "C1") , "Editor");
	var_editor = var_Editor;
		_ObjectSetProperty( var_editor , "EditType", 17);
		_ObjectCallMethod( var_editor , "ClearItems");
		_ObjectCallMethod( var_editor , "AddItem", 255,"Red Color");
		_ObjectCallMethod( var_editor , "AddItem", 16711680,"Blue Color");
		_ObjectCallMethod( var_editor , "AddItem", 65280,"Green Color");
	_ObjectSetProperty( _ObjectGetProperty( _ObjectCallMethod( columns , "Add", "C2") , "Editor") , "EditType", 268435457);
	_ObjectSetProperty( _ObjectGetProperty( _ObjectCallMethod( columns , "Add", "C3") , "Editor") , "EditType", 268435457);
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = 16711680");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = 65280");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,3) = 255");
	h = _ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = 255");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = 16711680");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,3) = 65280");
_ObjectCallMethod( grid , "EndUpdate");

961
Is there an easy way to get an effect like in a Microsoft Access / SQL-Server Table view, where you can scroll-up till the last row containing data is displayed as top-row

OBJECT grid,rs;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HasLines", 0);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "ScrollBars", 2051);
_ObjectCallMethod(grid, "ExecuteTemplate", "ScrollPos(True) = Items.ItemCount");
_ObjectCallMethod( grid , "EndUpdate");

960
Does filtering work with umlauts / accents characters
OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Names");
	_ObjectSetProperty( column , "DisplayFilterButton", -1);
	_ObjectSetProperty( column , "FilterType", 3);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "Mantel");
	_ObjectCallMethod( items , "AddItem", "Mechanik");
	_ObjectCallMethod( items , "AddItem", "Motor");
	_ObjectCallMethod( items , "AddItem", "Murks");
	_ObjectCallMethod( items , "AddItem", "Märchen");
	_ObjectCallMethod( items , "AddItem", "Möhren");
	_ObjectCallMethod( items , "AddItem", "Mühle");
	_ObjectCallMethod( items , "AddItem", "Sérigraphie");
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(0).Filter = `*ä*`");
_ObjectCallMethod( grid , "ApplyFilter");
_ObjectCallMethod( grid , "EndUpdate");

959
How FullPath method works

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "LinesAtRoot", -1);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C1");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C2");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = `A`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(InsertItem(h,,`Child 1`),1) = `B`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(InsertItem(h,,`Child 2`),1) = `C`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(h) = True");
_ObjectSetProperty( grid , "SearchColumnIndex", 1);
_ObjectCallMethod(grid, "TemplatePut", "Dim _ObObj")
_ObjectCallMethod(grid, "TemplatePut", _ObjectGetProperty( grid , "Items"))
Message( _ObjectGetProperty( grid , "SearchColumnIndex") );
Message( _ObjectCallMethod(grid, "ExecuteTemplate", "_ObObj.FullPath(ItemByIndex(2))") );
_ObjectSetProperty( grid , "SearchColumnIndex", 0);
Message( _ObjectGetProperty( grid , "SearchColumnIndex") );
Message( _ObjectCallMethod(grid, "ExecuteTemplate", "_ObObj.FullPath(ItemByIndex(2))") );
_ObjectCallMethod( grid , "EndUpdate");

958
Can I set the search box / filterbarprompt to invisible, so I can use my own input and *string* via VBA
OBJECT columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", -1);
_ObjectSetProperty( grid , "ContinueColumnScroll", 0);
_ObjectSetProperty( grid , "MarkSearchColumn", 0);
_ObjectSetProperty( grid , "SearchColumnIndex", 1);
_ObjectSetProperty( grid , "FilterBarHeight", 0);
_ObjectSetProperty( grid , "FilterBarPromptVisible", 1);
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "Name") , "Width", 96);
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "Title") , "Width", 96);
	_ObjectCallMethod( columns , "Add", "City");
items = _ObjectGetProperty( grid , "Items");
	h0 = _ObjectCallMethod( items , "AddItem", "Nancy Davolio");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h0")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h0)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Sales Representative`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `Seattle`");
	h0 = _ObjectCallMethod( items , "AddItem", "Andrew Fuller");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Vice President, Sales`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `Tacoma`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.SelectItem(h0) = True");
	h0 = _ObjectCallMethod( items , "AddItem", "Janet Leverling");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Sales Representative`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `Kirkland`");
	h0 = _ObjectCallMethod( items , "AddItem", "Margaret Peacock");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Sales Representative`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `Redmond`");
	h0 = _ObjectCallMethod( items , "AddItem", "Steven Buchanan");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Sales Manager`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `London`");
	h0 = _ObjectCallMethod( items , "AddItem", "Michael Suyama");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Sales Representative`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `London`");
	h0 = _ObjectCallMethod( items , "AddItem", "Robert King");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Sales Representative`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `London`");
	h0 = _ObjectCallMethod( items , "AddItem", "Laura Callahan");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Inside Sales Coordinator`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `Seattle`");
	h0 = _ObjectCallMethod( items , "AddItem", "Anne Dodsworth");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,1) = `Sales Representative`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h0,2) = `London`");
_ObjectSetProperty( grid , "FilterBarPromptPattern", "London");
_ObjectCallMethod( grid , "EndUpdate");

957
How to load a hierarchy using the control's DataSource property (Parent-ID-Relation)

// AddItem event - Occurs after a new Item has been inserted to Items collection.
FUNCTION gridEvents_AddItem(OBJECT grid, INT Item)
	OBJECT items;
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,Item")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", Item)
		_ObjectCallMethod( items , "SetParent", Item,_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FindItem(CellValue(Item,`ReportsTo`),`EmployeeID`)"));
END

OBJECT grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "LinesAtRoot", -1);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( grid , "ContinueColumnScroll", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "SELECT * FROM Employees ORDER BY ReportsTo","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectCallMethod(grid, "ExecuteTemplate", "Items.ExpandItem(0) = True");
_ObjectCallMethod( grid , "EndUpdate");

956
Is it possible to select the entire row/line, when user clicks the first column, and select individually the rest of cells, while user clicks any other column

// MouseDown event - Occurs when the user presses a mouse button.
FUNCTION gridEvents_MouseDown(OBJECT grid, INT Button, INT Shift, INT X, INT Y)
	_ObjectCallMethod(grid, "TemplatePut", "Dim c,hit")
	_ObjectCallMethod(grid, "TemplatePut", c)
	_ObjectCallMethod(grid, "TemplatePut", hit)
	i = _ObjectCallMethod(grid, "ExecuteTemplate", "ItemFromPoint(-1,-1,c,hit)");
	_ObjectCallMethod(grid, "TemplatePut", "Dim _ObObj,c")
	_ObjectCallMethod(grid, "TemplatePut", _ObjectGetProperty( grid , "Columns"))
	_ObjectCallMethod(grid, "TemplatePut", c)
	_ObjectSetProperty( grid , "FullRowSelect", _ObjectCallMethod(grid, "ExecuteTemplate", "_ObObj.Item(c).Data"));
END

OBJECT grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HeaderHeight", 22);
_ObjectSetProperty( grid , "HeaderAppearance", 1);
_ObjectSetProperty( grid , "BackColorLock", 15790320);
_ObjectSetProperty( grid , "BackColorHeader", _ObjectGetProperty( grid , "BackColorLock"));
_ObjectSetProperty( grid , "HasLines", 0);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( grid , "SortBarVisible", 0);
_ObjectSetProperty( grid , "AllowGroupBy", -1);
_ObjectSetProperty( grid , "ReadOnly", -1);
_ObjectSetProperty( grid , "ShowFocusRect", 0);
_ObjectSetProperty( grid , "CountLockedColumns", 1);
_ObjectSetProperty( grid , "AutoDrag", 16);
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectSetProperty( grid , "ColumnsAllowSizing", -1);
_ObjectSetProperty( grid , "DrawGridLines", -1);
_ObjectSetProperty( grid , "GridLineStyle", 48);
_ObjectSetProperty( grid , "GridLineColor", 14474460);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(0).Data = -1");
_ObjectSetProperty( grid , "Layout", "singlesort=^"C5:1^";multiplesort=^" C1:2^"");
_ObjectCallMethod( grid , "EndUpdate");

955
The user are not able to size the columns at runtime when using HeaderAppearance property on zero
OBJECT grid;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( _ObjectGetProperty( grid , "VisualAppearance") , "Add", 1,"gBFLBCJwBAEHhEJAAEhABJEIQAAYAQGKIYBkAKBQAGaAoDDcMQ5QwAAyDGKEEwsACEIrjKCRShyCYZRhGcTSBCIZBqEqSZLiEZRQiiCYsS5GQBSFDcOwHGyQZonKK3L" +
	"hGCYBgIA=");
_ObjectSetProperty( grid , "HeaderAppearance", 16777216);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", 1);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", 2);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", 3);

954
Is it possible to embed the exGauge into the exGrid control

// ItemOleEvent event - Fired when an ActiveX control hosted by an item has fired an event.
FUNCTION gridEvents_ItemOleEvent(OBJECT grid, INT Item, OBJECT Ev)
	OBJECT gauge;
	gauge = _ObjectCallMethod(grid, "ExecuteTemplate", "Items.ItemObject(Me.Items.ItemByIndex(2))");
		v = _ObjectCallMethod( gauge , "FormatABC", "date(`now`)");
		_ObjectCallMethod(grid, "TemplatePut", "Dim gauObj")
		_ObjectCallMethod(grid, "TemplatePut", gauge)
		_ObjectCallMethod(grid, "ExecuteTemplate", "gauObj.Layers.Item(`sec`).Value = v");
		_ObjectCallMethod(grid, "ExecuteTemplate", "gauObj.Layers.Item(`min`).Value = v");
		_ObjectCallMethod(grid, "ExecuteTemplate", "gauObj.Layers.Item(`hour`).Value = v");
END

// MouseMove event - Occurs when the user moves the mouse.
FUNCTION gridEvents_MouseMove(OBJECT grid, INT Button, INT Shift, INT X, INT Y)
	OBJECT gauge;
	gauge = _ObjectCallMethod(grid, "ExecuteTemplate", "Items.ItemObject(Me.Items.ItemByIndex(2))");
		_ObjectSetProperty( gauge , "TimerInterval", 1000);
END

OBJECT gauge,grid,items,layer;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ScrollBySingleLine", -1);
_ObjectSetProperty( grid , "LinesAtRoot", -1);
_ObjectSetProperty( grid , "HasLines", 2);
_ObjectSetProperty( grid , "ScrollBySingleLine", -1);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Default");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Normal Item");
	h = _ObjectCallMethod( items , "AddItem", "Gauge-Clock Inside");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(h) = True");
	h = _ObjectCallMethod( items , "InsertControlItem", h,"Exontrol.Gauge");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemHeight(h) = 256");
	gauge = _ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemObject(h)");
		_ObjectSetProperty( gauge , "PicturesPath", "C:\Program Files\Exontrol\ExGauge\Sample\Design\Circular\Clock");
		_ObjectCallMethod(grid, "TemplatePut", "Dim gauObj")
		_ObjectCallMethod(grid, "TemplatePut", gauge)
		_ObjectCallMethod(grid, "ExecuteTemplate", "gauObj.DefaultLayer(185) = 2");
		_ObjectSetProperty( _ObjectGetProperty( gauge , "Layers") , "Count", 4);
		layer = _ObjectCallMethod(grid, "ExecuteTemplate", "gauObj.Layers.Item(0)");
			_ObjectSetProperty( _ObjectGetProperty( _ObjectGetProperty( layer , "Background") , "Picture") , "Name", "vista_clock.png");
		layer = _ObjectCallMethod(grid, "ExecuteTemplate", "gauObj.Layers.Item(1)");
			_ObjectSetProperty( layer , "Position", 3);
			_ObjectSetProperty( layer , "Key", "sec");
			_ObjectSetProperty( layer , "OnDrag", 2);
			_ObjectSetProperty( layer , "Selectable", 0);
			_ObjectSetProperty( _ObjectGetProperty( _ObjectGetProperty( layer , "Background") , "Picture") , "Name", "second-hand.png");
			_ObjectSetProperty( layer , "ValueToRotateAngle", "((2:=(((1:=( ( (0:=(value < 0 ? floor(value) + 1 - value : value - floor(value))) < 0.5 ? =:0 : (0:= (=:0 - 0.5)) ) * 24 ))  - " +
	"floor(=:1)) * 60 )) - floor(=:2) ) * 360");
			_ObjectSetProperty( layer , "RotateAngleToValue", "value / 360 / 24 / 60");
		layer = _ObjectCallMethod(grid, "ExecuteTemplate", "gauObj.Layers.Item(2)");
			_ObjectSetProperty( layer , "Position", 2);
			_ObjectSetProperty( layer , "Key", "min");
			_ObjectSetProperty( layer , "OnDrag", 2);
			_ObjectSetProperty( layer , "Selectable", 0);
			_ObjectSetProperty( _ObjectGetProperty( _ObjectGetProperty( layer , "Background") , "Picture") , "Name", "Minute.png");
			_ObjectSetProperty( layer , "ValueToRotateAngle", "((1:=( ( (0:=(value < 0 ? floor(value) + 1 - value : value - floor(value))) < 0.5 ? =:0 : (0:= (=:0 - 0.5)) ) * 24 ))  - floor(" +
	"=:1)) * 360");
			_ObjectSetProperty( layer , "RotateAngleToValue", "value / 360 / 24 / 60");
		layer = _ObjectCallMethod(grid, "ExecuteTemplate", "gauObj.Layers.Item(3)");
			_ObjectSetProperty( layer , "Position", 1);
			_ObjectSetProperty( layer , "Key", "hour");
			_ObjectSetProperty( layer , "OnDrag", 2);
			_ObjectSetProperty( _ObjectGetProperty( _ObjectGetProperty( layer , "Background") , "Picture") , "Name", "Hour.png");
			_ObjectSetProperty( layer , "ValueToRotateAngle", "2 * 360 * ( (0:=(value < 0 ? floor(value) + 1 - value : value - floor(value))) < 0.5 ? =:0 : (0:= (=:0 - 0.5)) )");
			_ObjectSetProperty( layer , "RotateAngleToValue", "value / 360 * 0.5");
		v = _ObjectCallMethod( gauge , "FormatABC", "date(`now`)");
		_ObjectCallMethod(grid, "ExecuteTemplate", "gauObj.Layers.Item(`sec`).Value = v");
		_ObjectCallMethod(grid, "ExecuteTemplate", "gauObj.Layers.Item(`min`).Value = v");
		_ObjectCallMethod(grid, "ExecuteTemplate", "gauObj.Layers.Item(`hour`).Value = v");
	h = _ObjectCallMethod( items , "AddItem", "Normal Item");
_ObjectCallMethod( grid , "EndUpdate");

953
What's the difference between merge cells and divider item

// AddItem event - Occurs after a new Item has been inserted to Items collection.
FUNCTION gridEvents_AddItem(OBJECT grid, INT Item)
	OBJECT items;
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,Item")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", Item)
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellBackColor(Item,0) = 15790320");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemHasChildren(Item) = True");
END

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "TreeColumnIndex", 0);
_ObjectSetProperty( grid , "LinesAtRoot", -1);
_ObjectSetProperty( grid , "DrawGridLines", -1);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C1") , "FormatColumn", "1 index `A-Z`");
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C2") , "FormatColumn", "1 index ``");
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C3") , "FormatColumn", "1 index ``");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", );
	_ObjectCallMethod( items , "AddItem", );
	h = _ObjectCallMethod( items , "AddItem", );
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellMerge(h,0) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(h,0) = ``merge cells``");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellHAlignment(h,0) = 1");
	h = _ObjectCallMethod( items , "AddItem", );
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(h) = 0");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellHAlignment(h,0) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(h,0) = ``item divider``");
	_ObjectCallMethod( items , "AddItem", );
	_ObjectCallMethod( items , "AddItem", );
_ObjectCallMethod( grid , "EndUpdate");

952
is it possible to resize a column with the mouse without changing the width of the next column

OBJECT grid;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Column 1") , "Width", 256);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Column 2") , "Width", 512);
_ObjectSetProperty( grid , "DrawGridLines", -1);
_ObjectCallMethod( grid , "EndUpdate");

951
How do I ensure that the newly item fits the control's client area

// ButtonClick event - Occurs when user clicks on the cell's button.
FUNCTION gridEvents_ButtonClick(OBJECT grid, INT Item, INT ColIndex, VARIANT Key)
	OBJECT items;
	items = _ObjectGetProperty( grid , "Items");
		h = _ObjectCallMethod( items , "AddItem", "");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", h)
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.SelectItem(h) = True");
		_ObjectCallMethod( items , "EnsureVisibleItem", h);
	_ObjectSetProperty( grid , "FocusColumnIndex", 0);
END

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "");
	_ObjectSetProperty( column , "AllowSizing", 0);
	_ObjectSetProperty( column , "AllowDragging", 0);
	_ObjectSetProperty( column , "AllowSort", 0);
	_ObjectSetProperty( column , "Width", 24);
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(2) = True");
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position") , "FormatColumn", "1 apos `A-Z`");
_ObjectSetProperty( grid , "CountLockedColumns", 1);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
_ObjectCallMethod( grid , "EndUpdate");

950
How do I find the predefined string for giving value, or giving identifier for specified predefined caption of editor

// Change event - Occurs when the user changes the cell's content.
FUNCTION gridEvents_Change(OBJECT grid, INT Item, INT ColIndex, VARIANT NewValue)
	_ObjectCallMethod(grid, "TemplatePut", "Dim _ObObj,NewValue")
	_ObjectCallMethod(grid, "TemplatePut", _ObjectGetProperty( grid , "Columns"))
	_ObjectCallMethod(grid, "TemplatePut", NewValue)
	Message( "FindItem(numeric) is " );
	Message( NewValue );
	Message( _ObjectCallMethod(grid, "ExecuteTemplate", "_ObObj.Item(0).Editor.FindItem(NewValue)") );
END

OBJECT column,editor,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "DropDownList");
	editor = _ObjectGetProperty( column , "Editor");
		_ObjectSetProperty( editor , "EditType", 3);
		_ObjectCallMethod( editor , "AddItem", 1,"Ken Robinson");
		_ObjectCallMethod( editor , "AddItem", 2,"Dave Nichols");
		_ObjectCallMethod( editor , "AddItem", 3,"Zane Thomas");
		_ObjectCallMethod( editor , "AddItem", 4,"James Shields");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "CellValue");
	_ObjectSetProperty( column , "FormatColumn", "%0");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(4) = 15790320");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(7) = Def(4)");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "CellCaption");
	_ObjectSetProperty( column , "FormatColumn", "%C0");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(4) = 15790320");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(7) = Def(4)");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", 1);
	_ObjectCallMethod( items , "AddItem", _ObjectCallMethod(grid, "ExecuteTemplate", ".Columns.Item(0).Editor.FindItem(`Zane Thomas`)"));
	_ObjectCallMethod( items , "AddItem", 2);
_ObjectCallMethod( grid , "EndUpdate");

949
How can I align captions of items with checkbox, with items with no checkbox

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Default");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellImages(AddItem(0),0) = `1`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellHasCheckBox(AddItem(1),0) = True");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellImages(AddItem(2),0) = `1`");
_ObjectCallMethod( grid , "EndUpdate");

948
How can I prevent sorting a column

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "LinesAtRoot", -1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Default");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(0) = True");
	_ObjectSetProperty( column , "PartialCheck", -1);
	_ObjectSetProperty( column , "AllowSort", 0);
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Root");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 1");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 2");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(h) = True");
_ObjectCallMethod( grid , "EndUpdate");

947
Is there a possibility to group without moving and showing the column to the SortBar

OBJECT grid,rs;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HasLines", 0);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectSetProperty( grid , "SortBarVisible", 0);
_ObjectSetProperty( grid , "AllowGroupBy", -1);
_ObjectSetProperty( grid , "Layout", "singlesort=^"C5:1^";multiplesort=^" C1:2^"");
_ObjectCallMethod( grid , "EndUpdate");

946
How can I show each group header ( not-subroup ), with a different background color, while alternate background colors for inside items

// LayoutChanged event - Occurs when column's position or column's size is changed.
FUNCTION gridEvents_LayoutChanged()
	_ObjectCallMethod( grid , "Refresh");
END

OBJECT column,grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HasLines", 0);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectSetProperty( grid , "SortBarVisible", -1);
_ObjectSetProperty( grid , "AllowGroupBy", -1);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(1).SortOrder = True");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position");
	_ObjectSetProperty( column , "FormatColumn", "(0:= (1 rpos '')) right ( ( 1:= ( =:0 rfind `.` ) ) != -1 ? =:1 : len(=:0))");
	_ObjectSetProperty( column , "Visible", 0);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position");
	_ObjectSetProperty( column , "FormatColumn", "(1 rpos '') contains '.'");
	_ObjectSetProperty( column , "Visible", 0);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "(%C13 mod 2) != 0") , "BackColor", 15790320);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "%C14 = 0") , "BackColor", 12500670);
_ObjectCallMethod( grid , "EndUpdate");

945
What is the difference between %0 and %C0, when using in expressions ( format, conditional format, computed fields, and so on )

OBJECT column,editor,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HeaderAppearance", 4);
_ObjectSetProperty( grid , "HeaderHeight", 24);
_ObjectSetProperty( grid , "ScrollBySingleLine", -1);
_ObjectSetProperty( grid , "DrawGridLines", -2);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Add(`Value`).Def(17) = 1");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "FormatColumn = `%0` ~ CellValue");
	_ObjectSetProperty( column , "FormatColumn", "%0");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(16) = False");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "FormatColumn = `%C0`~ CellCaption");
	_ObjectSetProperty( column , "FormatColumn", "%C0");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(16) = False");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", 1.1234);
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(AddItem(`<sha ;;0>This <fgcolor=FF0000>is a <s><b>HTM</fgcolor>L</b> text</s>.`),0) = 1");
	editor = _ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellEditor(AddItem(3))");
		_ObjectSetProperty( editor , "EditType", 6);
		_ObjectCallMethod( editor , "AddItem", 1,"Border");
		_ObjectCallMethod( editor , "AddItem", 2,"Thick");
		_ObjectCallMethod( editor , "AddItem", 4,"Shadow");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(AddItem(10000),0) = ``<b>` + currency(value)`");
_ObjectCallMethod( grid , "EndUpdate");

944
How can I alternate colors for each group header ( not-subroup ), with a different background color, while items of the same group showing with a different color

// LayoutChanged event - Occurs when column's position or column's size is changed.
FUNCTION gridEvents_LayoutChanged()
	_ObjectCallMethod( grid , "Refresh");
END

OBJECT column,grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HasLines", 0);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectSetProperty( grid , "SortBarVisible", -1);
_ObjectSetProperty( grid , "AllowGroupBy", -1);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(1).SortOrder = True");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position");
	_ObjectSetProperty( column , "FormatColumn", "(0:= (1 rpos '')) left ( ( 1:= ( =:0 lfind `.` ) ) != -1 ? =:1 : len(=:0))");
	_ObjectSetProperty( column , "Visible", 0);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position");
	_ObjectSetProperty( column , "FormatColumn", "(1 rpos '') contains '.'");
	_ObjectSetProperty( column , "Visible", 0);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "(%C13 mod 2) != 0") , "BackColor", 15790320);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "%C14 = 0") , "BackColor", 12500670);
_ObjectCallMethod( grid , "EndUpdate");

943
How can I highlight each group header, with a different background color (method 2)

// AddGroupItem event - Occurs after a new Group Item has been inserted to Items collection.
FUNCTION gridEvents_AddGroupItem(OBJECT grid, INT Item)
	_ObjectCallMethod(grid, "TemplatePut", "Dim Item")
	_ObjectCallMethod(grid, "TemplatePut", Item)
	_ObjectCallMethod(grid, "ExecuteTemplate", "Items.ItemBackColor(Item) = 12500670");
END

OBJECT grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HasLines", 0);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectSetProperty( grid , "SortBarVisible", -1);
_ObjectSetProperty( grid , "AllowGroupBy", -1);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(1).SortOrder = True");
_ObjectCallMethod( grid , "EndUpdate");

942
How can I highlight each group header ( not-subroup ), with a different background color (method 1)

// LayoutChanged event - Occurs when column's position or column's size is changed.
FUNCTION gridEvents_LayoutChanged()
	_ObjectCallMethod( grid , "Refresh");
END

OBJECT column,grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HasLines", 0);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectSetProperty( grid , "SortBarVisible", -1);
_ObjectSetProperty( grid , "AllowGroupBy", -1);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(1).SortOrder = True");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position");
	_ObjectSetProperty( column , "FormatColumn", "(0:= (1 rpos '')) left ( ( 1:= ( =:0 lfind `.` ) ) != -1 ? =:1 : len(=:0))");
	_ObjectSetProperty( column , "Visible", 0);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position");
	_ObjectSetProperty( column , "FormatColumn", "(1 rpos '') contains '.'");
	_ObjectSetProperty( column , "Visible", 0);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "%C14 = 0") , "BackColor", 12500670);
_ObjectCallMethod( grid , "EndUpdate");

941
The BackColorAlternate displays each second row with a different background color. Is it possible to apply a different background color, for each sub-tree, ConditionalFormats, Add

// LayoutChanged event - Occurs when column's position or column's size is changed.
FUNCTION gridEvents_LayoutChanged()
	_ObjectCallMethod( grid , "Refresh");
END

// Sort event - Fired when the control sorts a column.
FUNCTION gridEvents_Sort()
	_ObjectCallMethod( grid , "Refresh");
END

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "LinesAtRoot", -1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "P1");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(0) = True");
	_ObjectSetProperty( column , "PartialCheck", -1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "P2");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(0) = True");
	_ObjectSetProperty( column , "PartialCheck", -1);
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Root 1");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 1");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 2");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(h) = True");
	h = _ObjectCallMethod( items , "AddItem", "Root 2");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 1");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 2");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(h) = True");
	h = _ObjectCallMethod( items , "AddItem", "Root 2");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 1");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 2");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(h) = True");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position");
	_ObjectSetProperty( column , "FormatColumn", "(0:= (1 rpos '')) left ( ( 1:= ( =:0 lfind `.` ) ) != -1 ? =:1 : len(=:0))");
	_ObjectSetProperty( column , "Visible", 0);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "(%C2 mod 2) != 0") , "BackColor", 15790320);
_ObjectCallMethod( grid , "EndUpdate");

940
The BackColorAlternate displays each second row with a different background color. Is it possible to apply a different background color, for 2nd, 3rd, 4th, row, and so on

// LayoutChanged event - Occurs when column's position or column's size is changed.
FUNCTION gridEvents_LayoutChanged()
	_ObjectCallMethod( grid , "Refresh");
END

// Sort event - Fired when the control sorts a column.
FUNCTION gridEvents_Sort()
	_ObjectCallMethod( grid , "Refresh");
END

OBJECT column,grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HasLines", 0);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position");
	_ObjectSetProperty( column , "FormatColumn", "1 apos ''");
	_ObjectSetProperty( column , "Visible", 0);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "(%C13 mod 5) = 1") , "BackColor", 8421504);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "(%C13 mod 5) = 2") , "BackColor", 10790052);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "(%C13 mod 5) = 3") , "BackColor", 12500670);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "(%C13 mod 5) = 4") , "BackColor", 15790320);
_ObjectCallMethod( grid , "EndUpdate");

939
The BackColorAlternate displays each second row with a different background color. The question I have it is possible to apply a different background color for 3rd, 4th, row, and so on

// LayoutChanged event - Occurs when column's position or column's size is changed.
FUNCTION gridEvents_LayoutChanged()
	_ObjectCallMethod( grid , "Refresh");
END

// Sort event - Fired when the control sorts a column.
FUNCTION gridEvents_Sort()
	_ObjectCallMethod( grid , "Refresh");
END

OBJECT column,grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HasLines", 0);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position");
	_ObjectSetProperty( column , "FormatColumn", "1 apos ''");
	_ObjectSetProperty( column , "Visible", 0);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "(%C13 mod 4) = 0") , "BackColor", 15790320);
_ObjectCallMethod( grid , "EndUpdate");

938
The BackColorAlternate looks fine for flat tables, but how about using it when displaying a hierarchy/tree, like grouping rows. The sample alternate colors for each group found

// LayoutChanged event - Occurs when column's position or column's size is changed.
FUNCTION gridEvents_LayoutChanged()
	_ObjectCallMethod( grid , "Refresh");
END

OBJECT column,grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "HasLines", 0);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectSetProperty( grid , "SortBarVisible", -1);
_ObjectSetProperty( grid , "AllowGroupBy", -1);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(1).SortOrder = True");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Position");
	_ObjectSetProperty( column , "FormatColumn", "(0:= (1 rpos '')) left ( ( 1:= ( =:0 lfind `.` ) ) != -1 ? =:1 : len(=:0))");
	_ObjectSetProperty( column , "Visible", 0);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "ConditionalFormats") , "Add", "(%C13 mod 2) != 0") , "BackColor", 15790320);
_ObjectCallMethod( grid , "EndUpdate");

937
I need to display sub-totals in the grouping items. Is there any solution on this

// AddGroupItem event - Occurs after a new Group Item has been inserted to Items collection.
FUNCTION gridEvents_AddGroupItem(OBJECT grid, INT Item)
	OBJECT items;
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,Item")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", Item)
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(Item) = -1");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.EnableItem(Item) = False");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(Item,Me.TreeColumnIndex) = 1");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(Item,Me.TreeColumnIndex) = `%1`");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(Item,`Freight`) = 5");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(Item,`Freight`) = `sum(current,dir,%6)`");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(Item,`Freight`) = ``<b>` + currency(value)`");
END

OBJECT grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "SelBackMode", 1);
_ObjectSetProperty( grid , "BackColorSortBar", 15790320);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "SortBarVisible", -1);
_ObjectSetProperty( grid , "SortBarCaption", "Drag a <b>column</b> header here to group by that column.");
_ObjectSetProperty( grid , "AllowGroupBy", -1);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(1).SortOrder = 1");
_ObjectSetProperty( grid , "LinesAtRoot", 5);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(`ShipVia`).DisplayFilterButton = True");
_ObjectCallMethod( grid , "EndUpdate");

936
I use a subtotal in exTop-Item, after grouping the item shows 0. What is the solution

OBJECT grid,items,rs;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectSetProperty( grid , "AllowGroupBy", -1);
_ObjectSetProperty( grid , "SortBarVisible", -1);
_ObjectSetProperty( grid , "BackColorSortBar", _ObjectGetProperty( grid , "BackColor"));
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(5).SortOrder = 1");
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(6).FormatColumn = `currency(value)`");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.LockedItemCount(0) = 1");
	h = _ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.LockedItem(0,0)");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemBackColor(h) = 15790320");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellBackColor(h,6) = 12500670");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,6) = `sum(all,rec,%6)`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(h,6) = 4");
_ObjectCallMethod( grid , "Refresh");
_ObjectCallMethod( grid , "EndUpdate");

935
I would like to avoid manual typing in the date-cell because user often type wrong things (no decimal points and so on) and so the todays-date is generated for the cell. What can be done

// KeyPress event - Occurs when the user presses and releases an ANSI key.
FUNCTION gridEvents_KeyPress(OBJECT grid, INT KeyAscii)
	Message( "if .Editying != 0 then" );
	Message( _ObjectGetProperty( grid , "Editing") );
	KeyAscii = 0;
END

OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectCallMethod( columns , "Add", "Tasks");
	column = _ObjectCallMethod( columns , "Add", "Date");
		_ObjectSetProperty( _ObjectGetProperty( column , "Editor") , "EditType", 7);
		_ObjectSetProperty( column , "Width", 128);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 1`),1) = #9/21/2006#");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 2`),1) = #12/22/2015#");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 3`),1) = #1/10/2015#");
_ObjectCallMethod( grid , "EndUpdate");

934
The control does not ensure the item to fit the control's client area once the user clicks the cell's button or check box. What can be done
// MouseDown event - Occurs when the user presses a mouse button.
FUNCTION gridEvents_MouseDown(OBJECT grid, INT Button, INT Shift, INT X, INT Y)
	' Items.EnsureVisibleItem(ItemFromPoint(-1,-1,c,hit))

END

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "TreeColumnIndex", -1);
_ObjectSetProperty( grid , "SelForeColor", _ObjectGetProperty( grid , "ForeColor"));
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Buttons");
	_ObjectSetProperty( column , "Alignment", 1);
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(2) = True");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "Button A");
	_ObjectCallMethod( items , "AddItem", "Button B");
	_ObjectCallMethod( items , "AddItem", "Button C");
_ObjectCallMethod( grid , "EndUpdate");

933
How do you save the index number from a drop down to a database

OBJECT column,editor,grid,rs;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
column = _ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(`ShipVia`)");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(4) = 15790320");
	_ObjectSetProperty( column , "Position", 1);
	_ObjectSetProperty( column , "Width", 96);
	editor = _ObjectGetProperty( column , "Editor");
		_ObjectSetProperty( editor , "EditType", 3);
		_ObjectCallMethod( editor , "AddItem", 1,"Speedy Express");
		_ObjectCallMethod( editor , "AddItem", 2,"United Package");
		_ObjectCallMethod( editor , "AddItem", 3,"Federal Shipping");
_ObjectCallMethod( grid , "EndUpdate");

932
Is there a way to set the column width and have it stay when refreshing using the data source

OBJECT grid,rs;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "Layout", "gBjAAwAAuABmABpABsAB0ABlAByhoAPIAOEPAA9gYABoABQAgUEg0XN4AOcJicKkpujIAGMcj0gjcGk8QhkQgUOjUEjsfkMFAB2lEnhRihcYjUvnsykQAO8oMkTNEtG" +
	"gAGUwn0uoEIhUMh0QiUOisXiE7rEyl8jAElokptYAllmpcCtMmjE3mU6jdzrUGoUKttGvFJs90oFPhVRh1Twg4wtaptco9fiMTsdIvcxw1Nkl2hUOlVwlsvnmayFAmtH" +
	"nETuWm0lAv+eAGCzFK10zp1QqVUAGOvkvuuSr0YsMUi2Y0tZ4FAztt0FvuNa23Kvt2m0YnMt5No6uxwOq0eP5cGxAAxQAxgAGwAqu/q1blHDsGW49lzPUq9qtko58r8K" +
	"rvc/LrPA7LWvw2ChpQ2j7Om7kBPK870hu+6ZQE4SJvmsT6u0x8BOa/iUP8jUANNATUrxAsKIFATvQU8DCL5B7dMWlr1u2gQZvgrsMMrDSyQ4vkcv02T+tEjUcyC1C7uw" +
	"1kVABISgwSosXq1JLyRm9EaycqqDQuyjisu+0bvY5i3udEMjTIvkuQHFEmzHNkWymwcqtNNkIN2jUbMeGsdMm4j6R/AyZT7IcztC6M+r5Qs2yYvUx0ZOTZypBqBUZPEa" +
	"Max71y6+MeTBDdBoFTjjv2z80Oi9a+VJE9HSA01SUlBbw1Ww8sPSqtFNNCdOx3L9AuQx9eVLIlUJbCa+WHVrV0fYUEMBF06UqAFh0xLLCT7abHV7P8MuNQUnW3YlDugl" +
	"rfNNcVlrzV6s3FWVKMfcVrPSq6rva0wcz8+Ue2/YK+XzQ0QUQlt83/JTr2ZdiZYBKNoTm2rH4ZedzSckqGDqAA2tEk7CSQmKEJKgWMY5CmQJlkaZYsAGMY0liFJYqKID" +
	"xhSpjCu0vUBQappOgSJZUhlBtTmyJIEqaBZVljRZe8yMZnoMl4SjQRI3qal3U7OjqPpOXNFmIAadCiHIkiDV6RjOla7puFKFnjK5/ta7Z6t6GIYkqEIQ1NmqWgIA=");
_ObjectCallMethod( grid , "EndUpdate");

931
Is it possible to decode/view the control's Layout property

OBJECT createobject("exontrol.print"),grid;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C0");
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C1") , "SortOrder", 1);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C2");
createobject("exontrol.print") = CreateObject("Exontrol.Print");
	_ObjectCallMethod(grid, "TemplatePut", "Dim creObj")
	_ObjectCallMethod(grid, "TemplatePut", createobject("exontrol.print"))
	Message( _ObjectCallMethod(grid, "ExecuteTemplate", "creObj.Decode64TextW(Me.Layout)") );
_ObjectCallMethod( grid , "EndUpdate");

930
How do I programmatically sort by multiple columns

OBJECT grid;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "SingleSort", 0);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C0");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C1");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "C2");
_ObjectSetProperty( grid , "Layout", "multiplesort=^"C2:1 C1:2 C0:2^"");
_ObjectCallMethod( grid , "EndUpdate");

929
Do you have any Fit-To-Page options when printing the control (W x T, Fit-To )

OBJECT createobject("exontrol.print"),grid,rs;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( grid , "ContinueColumnScroll", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectCallMethod( grid , "EndUpdate");
createobject("exontrol.print") = CreateObject("Exontrol.Print");
	_ObjectSetProperty( createobject("exontrol.print") , "Options", "FitToPage =2 x 1");
	_ObjectSetProperty( createobject("exontrol.print") , "PrintExt", grid);
	_ObjectCallMethod( createobject("exontrol.print") , "Preview");

928
Do you have any Fit-To-Page options when printing the control ( x T, Fit-To Tall )

OBJECT createobject("exontrol.print"),grid,rs;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( grid , "ContinueColumnScroll", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectCallMethod( grid , "EndUpdate");
createobject("exontrol.print") = CreateObject("Exontrol.Print");
	_ObjectSetProperty( createobject("exontrol.print") , "Options", "FitToPage = x 2");
	_ObjectSetProperty( createobject("exontrol.print") , "PrintExt", grid);
	_ObjectCallMethod( createobject("exontrol.print") , "Preview");

927
Do you have any Fit-To-Page options when printing the control ( W x, Fit-To Wide )

OBJECT createobject("exontrol.print"),grid,rs;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( grid , "ContinueColumnScroll", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectCallMethod( grid , "EndUpdate");
createobject("exontrol.print") = CreateObject("Exontrol.Print");
	_ObjectSetProperty( createobject("exontrol.print") , "Options", "FitToPage = 2 x");
	_ObjectSetProperty( createobject("exontrol.print") , "PrintExt", grid);
	_ObjectCallMethod( createobject("exontrol.print") , "Preview");

926
Do you have any Fit-To-Page options when printing the control ( percent view, Adjust-To )

OBJECT createobject("exontrol.print"),grid,rs;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( grid , "ContinueColumnScroll", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectCallMethod( grid , "EndUpdate");
createobject("exontrol.print") = CreateObject("Exontrol.Print");
	_ObjectSetProperty( createobject("exontrol.print") , "Options", "FitToPage = 50%");
	_ObjectSetProperty( createobject("exontrol.print") , "PrintExt", grid);
	_ObjectCallMethod( createobject("exontrol.print") , "Preview");

925
How can I get notified once the user expands a column

// LayoutChanged event - Occurs when column's position or column's size is changed.
FUNCTION gridEvents_LayoutChanged()
	_ObjectCallMethod(grid, "TemplatePut", "Dim _ObObj")
	_ObjectCallMethod(grid, "TemplatePut", _ObjectGetProperty( grid , "Columns"))
	Message( "Column-Expanded" );
	Message( _ObjectCallMethod(grid, "ExecuteTemplate", "_ObObj.Item(`C0`).Expanded") );
END

OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ShowFocusRect", 0);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( grid , "DrawGridLines", -1);
_ObjectSetProperty( grid , "BackColorLevelHeader", _ObjectGetProperty( grid , "BackColor"));
columns = _ObjectGetProperty( grid , "Columns");
	column = _ObjectCallMethod( columns , "Add", "C0");
		_ObjectSetProperty( column , "ExpandColumns", "0,1,2");
		_ObjectSetProperty( column , "DisplayExpandButton", -1);
	_ObjectCallMethod( columns , "Add", "C1");
	_ObjectCallMethod( columns , "Add", "C2");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Cell 0.0");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = `Cell 0.1`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = `Cell 0.2`");
	h = _ObjectCallMethod( items , "AddItem", "Cell 1.0");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = `Cell 1.1`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = `Cell 1.2`");
_ObjectCallMethod( grid , "EndUpdate");

924
I am using expandable headers, the question is how I can display the column itself, not just the child columns

OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( grid , "DrawGridLines", -1);
_ObjectSetProperty( grid , "BackColorLevelHeader", _ObjectGetProperty( grid , "BackColor"));
columns = _ObjectGetProperty( grid , "Columns");
	column = _ObjectCallMethod( columns , "Add", "C0");
		_ObjectSetProperty( column , "ExpandColumns", "0,1,2");
		_ObjectSetProperty( column , "DisplayExpandButton", -1);
	_ObjectCallMethod( columns , "Add", "C1");
	_ObjectCallMethod( columns , "Add", "C2");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Cell 0.0");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = `Cell 0.1`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = `Cell 0.2`");
	h = _ObjectCallMethod( items , "AddItem", "Cell 1.0");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = `Cell 1.1`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = `Cell 1.2`");
_ObjectCallMethod( grid , "EndUpdate");

923
How do I layout expandable columns

OBJECT column,columns,grid;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( grid , "DrawGridLines", -1);
_ObjectSetProperty( grid , "BackColorLevelHeader", _ObjectGetProperty( grid , "BackColor"));
columns = _ObjectGetProperty( grid , "Columns");
	column = _ObjectCallMethod( columns , "Add", "C0");
		_ObjectSetProperty( column , "ExpandColumns", "1,2");
		_ObjectSetProperty( column , "DisplayExpandButton", -1);
	_ObjectCallMethod( columns , "Add", "C1");
	_ObjectCallMethod( columns , "Add", "C2");
	_ObjectCallMethod( columns , "Add", "C3");
	column = _ObjectCallMethod( columns , "Add", "C4");
		_ObjectSetProperty( column , "ExpandColumns", "5,6");
		_ObjectSetProperty( column , "DisplayExpandButton", -1);
	_ObjectCallMethod( columns , "Add", "C5");
	column = _ObjectCallMethod( columns , "Add", "C6");
		_ObjectSetProperty( column , "ExpandColumns", "6,7");
		_ObjectSetProperty( column , "DisplayExpandButton", -1);
	_ObjectCallMethod( columns , "Add", "C7");
_ObjectCallMethod( grid , "EndUpdate");
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(`C4`).Expanded = False");

922
How do I make the control read-only (method 2)

// Edit event - Occurs just before editing the focused cell.
FUNCTION gridEvents_Edit(OBJECT grid, INT Item, INT ColIndex, INT Cancel)
	Cancel = -1;
END

OBJECT column,editor,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
editor = _ObjectGetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Editor") , "Editor");
	_ObjectSetProperty( editor , "EditType", 6);
	_ObjectCallMethod( editor , "AddItem", 1,"One");
	_ObjectCallMethod( editor , "AddItem", 2,"Two");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Check");
	editor = _ObjectGetProperty( column , "Editor");
		_ObjectSetProperty( editor , "EditType", 19);
		_ObjectCallMethod(grid, "TemplatePut", "Dim ediObj")
		_ObjectCallMethod(grid, "TemplatePut", editor)
		_ObjectCallMethod(grid, "ExecuteTemplate", "ediObj.Option(16) = 2");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(1),1) = 0");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(2),1) = 1");
_ObjectCallMethod( grid , "EndUpdate");

921
How do I set a locked check-box

OBJECT column,editor,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Locked-Check");
	editor = _ObjectGetProperty( column , "Editor");
		_ObjectSetProperty( editor , "EditType", 19);
		_ObjectCallMethod(grid, "TemplatePut", "Dim ediObj")
		_ObjectCallMethod(grid, "TemplatePut", editor)
		_ObjectCallMethod(grid, "ExecuteTemplate", "ediObj.Option(16) = 2");
		_ObjectSetProperty( editor , "Locked", -1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Unlocked-Check");
	editor = _ObjectGetProperty( column , "Editor");
		_ObjectSetProperty( editor , "EditType", 19);
		_ObjectCallMethod(grid, "ExecuteTemplate", "ediObj.Option(17) = 1");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(1),1) = 0");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(0),1) = 1");
_ObjectCallMethod( grid , "EndUpdate");

920
Does the title of the cell's tooltip supports HTML format

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "");
	_ObjectSetProperty( column , "Caption", "");
	_ObjectSetProperty( column , "HTMLCaption", "Column");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellToolTip(AddItem(`tooltip w/h different title`),0) = `<c><b><fgcolor=FF0000>Title</fgcolor></b><br>This is bit of text that's shown when the user hovers the cell. This shows the title centered with a different color.`");
_ObjectCallMethod( grid , "EndUpdate");

919
How do I specify a different title for the cell's tooltip

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "");
	_ObjectSetProperty( column , "Caption", "This is the title");
	_ObjectSetProperty( column , "HTMLCaption", "Column");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellToolTip(AddItem(`tooltip w/h different title`),0) = `This is bit of text that's shown when the user hovers the cell.`");
_ObjectCallMethod( grid , "EndUpdate");

918
The cell's tooltip displays the column's caption in its title. How can I get ride of that

OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectCallMethod( columns , "Add", "C1");
	_ObjectCallMethod( columns , "Add", "C2");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "tooltip w/h caption");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellToolTip(h,0) = `This is bit of text that's shown when the user hovers the cell. This shows the column's caption in the title.`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = `tooltip no caption`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellToolTip(h,1) = `This is bit of text that's shown when the user hovers the cell. This shows no column's caption in the title.`");
column = _ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(`C2`)");
	_ObjectSetProperty( column , "HTMLCaption", _ObjectGetProperty( column , "Caption"));
	_ObjectSetProperty( column , "Caption", "");
_ObjectCallMethod( grid , "EndUpdate");

917
How can I programmatically show the column's filter

// RClick event - Fired when right mouse button is clicked
FUNCTION gridEvents_RClick()
	_ObjectCallMethod(grid, "TemplatePut", "Dim c,hit")
	_ObjectCallMethod(grid, "TemplatePut", c)
	_ObjectCallMethod(grid, "TemplatePut", hit)
	i = _ObjectCallMethod(grid, "ExecuteTemplate", "ItemFromPoint(-1,-1,c,hit)");
	_ObjectCallMethod(grid, "TemplatePut", "Dim c")
	_ObjectCallMethod(grid, "TemplatePut", c)
	_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(c).ShowFilter(`-1,-1,128,128`)");
END

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ShowFocusRect", 0);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Items ");
	_ObjectSetProperty( column , "DisplayFilterPattern", 0);
	_ObjectSetProperty( column , "FilterList", 9472);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "Item 1");
	_ObjectCallMethod( items , "AddItem", "Item 2");
	_ObjectCallMethod( items , "AddItem", "Item 3");
_ObjectCallMethod( grid , "EndUpdate");

916
I want to be able to click on one of the headers, and sort by other column. How can I do that (method 2)

// ColumnClick event - Fired after the user clicks on column's header.
FUNCTION gridEvents_ColumnClick(OBJECT grid, OBJECT Column)
	' Column.SortOrder = 1
	_ObjectSetProperty( grid , "SortOnClick", -1);
	_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(`Sort`).SortOrder = 1");
	_ObjectSetProperty( grid , "SortOnClick", 1);
END

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "SortOnClick", 1);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Items");
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Sort") , "Visible", 0);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 1 (3)`),1) = 3");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 2 (1)`),1) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 3 (2)`),1) = 2");
_ObjectCallMethod( grid , "EndUpdate");

915
I want to be able to click on one of the headers, and sort by other column. How can I do that (method 1)

// ColumnClick event - Fired after the user clicks on column's header.
FUNCTION gridEvents_ColumnClick(OBJECT grid, OBJECT Column)
	' Column.SortOrder = 1
	_ObjectCallMethod( _ObjectGetProperty( grid , "Items") , "SortChildren", 0,"Sort",-1);
END

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "SortOnClick", 1);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Items");
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Sort") , "Visible", 0);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 1 (3)`),1) = 3");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 2 (1)`),1) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`Item 3 (2)`),1) = 2");
_ObjectCallMethod( grid , "EndUpdate");

914
How can I highlight the cell's button with a different appearance, when cursor hovers it

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectCallMethod( _ObjectGetProperty( grid , "VisualAppearance") , "Add", 1,"c:\exontrol\images\normal.ebn");
_ObjectSetProperty( grid , "DefaultItemHeight", 22);
_ObjectSetProperty( grid , "TreeColumnIndex", -1);
_ObjectSetProperty( grid , "SelForeColor", 0);
_ObjectSetProperty( grid , "SelBackColor", _ObjectGetProperty( grid , "BackColor"));
_ObjectCallMethod(grid, "ExecuteTemplate", "Background(157) = 16777216");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Buttons");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(2) = True");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
	_ObjectSetProperty( column , "Alignment", 1);
	_ObjectSetProperty( column , "HeaderAlignment", 1);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "Button <b>1</b>");
	_ObjectCallMethod( items , "AddItem", "Button <b>2</b>");
	_ObjectCallMethod( items , "AddItem", "Button <b>3</b>");
_ObjectCallMethod( grid , "EndUpdate");

913
How can I prevent highlighting the cell's button while cursor hovers it

// AddItem event - Occurs after a new Item has been inserted to Items collection.
FUNCTION gridEvents_AddItem(OBJECT grid, INT Item)
	OBJECT items;
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,Item")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", Item)
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(Item,0) = `Button <b>A</b>`");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(Item,1) = `Button <b>B</b>`");
END

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "DefaultItemHeight", 22);
_ObjectSetProperty( grid , "TreeColumnIndex", -1);
_ObjectSetProperty( grid , "SelForeColor", 0);
_ObjectSetProperty( grid , "SelBackColor", _ObjectGetProperty( grid , "BackColor"));
_ObjectCallMethod(grid, "ExecuteTemplate", "Background(157) = -1");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "A");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(2) = True");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
	_ObjectSetProperty( column , "Alignment", 1);
	_ObjectSetProperty( column , "HeaderAlignment", 1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "B");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(2) = True");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
	_ObjectSetProperty( column , "Alignment", 1);
	_ObjectSetProperty( column , "HeaderAlignment", 1);
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "") , "Position", 1);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellEnabled(AddItem(``),1) = False");
	_ObjectCallMethod( items , "AddItem", "");
	_ObjectCallMethod( items , "AddItem", "");
_ObjectCallMethod( grid , "EndUpdate");

912
How can I change the image of the icon while performing OLE Drag and Drop

// OLEStartDrag event - Occurs when the OLEDrag method is called.
FUNCTION gridEvents_OLEStartDrag(OBJECT grid, OBJECT Data, INT AllowedEffects)
	' Data.SetData("your data to drag")
	AllowedEffects = 2;
END

OBJECT appearance,grid,items;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "OLEDropMode", 1);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( grid , "DefaultItemHeight", 22);
_ObjectSetProperty( grid , "HeaderHeight", _ObjectGetProperty( grid , "DefaultItemHeight"));
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Default") , "Width", 128);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "Item 1");
	_ObjectCallMethod( items , "AddItem", "Item 2");
	_ObjectCallMethod( items , "AddItem", "Item 3");
	_ObjectCallMethod( items , "AddItem", "Item 4");
	_ObjectCallMethod( items , "AddItem", "Item 5");
appearance = _ObjectGetProperty( grid , "VisualAppearance");
	_ObjectCallMethod( appearance , "Add", 1,"gBFLBCJwBAEHhEJAAChABakMACAADACAxRDQNABQKAAzQFAYaBiG6GAAGEaRYgmFgAQhFcZQSKUOQTDKMIziYBYfgkMIgSbJUgDGAkRRdDSOYDmGQYDiCIoRShOMIjH" +
	"LUXxtDaIZwhEAoJb+RgAUY/cTzaAEUwHHiTKInaCQIhsC4JUJAdRURQ9EwvCIZBpEWwLChENQwWLCNj2TScBwjCyqbale45ViqdoDU8lORLUi+M4zSBPcZVTRtGShPDB" +
	"KTjMLaYgkIIlVpRNa0PC1GTzQ6mazkKQLRADDIDVbAeL3LiMBy9LyLLItQALByua5mWhbcZyBCOPgBTrRb5zO58FjuTK7YLjMB7NrUNYtFaUMy2OpOCADIaecTNcaWLx" +
	"PF2MY1HWYxVj2Jw3DuRJonKYB5lKAYkkYdA6hyDIjBkApaFoAAhBMfYxiGNAkFECZnm4YQBgiOgDl2URSE4KAEj2AJKigFgGgGYIIAyPQ6CCRogAAOxhAMSgSDgIRDhY" +
	"FoFmGCBmBQOAMjgdgQDsUITEIIg5iISAEmIOBigiJgqgqYhoFyVILyyMgyDmYxDg4rBjgiZg6g0Dh4kiTIMGMKAwmgOQkEkFhGhGZIJAoPoQAyQ4mE6BhlAkRgXhODoZ" +
	"C0A4Pg6KRmCSFplkkdheDmJYTioVgACOY4uGaDwmgmJhqg8JlWmOGRmGkChyhyZxJAobYbmMI4yHqFQnkmdh+2RYp4DMIZ5gaBohmiCYGB+IJOmoNhtiPXZGG2I1tgyb" +
	"4lmgGhmhqJt0Fyb4gk8CtsCiahKhYH4oXiAohiUKpKjaLt+goDJxiyaZqlaNot4OTJx3gKp2iiL5sAsBoov+KgMnOMZrisJpKjLjocnPeBLEaRI0m0SxWkSNBPEoDJ1j" +
	"abJrHaXo35obOZC2OximaOZugsYpi3ga42mKO5vAuRpijsTxqAyd49m8S5mnqPuqFyd4gk+DAGn6QJwEwFp+kAT+BnmQpwgwNwOkPtYsnnrgsFcEpFnGDBnBKRRPiwUw" +
	"ckecgMgcIpHGMKQwnuSZygyJ1/HKOgMnyS5zAyRwykycw5g4Eg0jCA57DqTpzkydw+kIDR9AUCY9A2HQXBIUh0g0JRJ5aUxmnQZIPnkUgvDUI5tFcVoPjUOB+A4QBAIC" +
	"A");
	_ObjectCallMethod( appearance , "Add", 2,"gBFLBCJwBAEHhEJAAChABC8MACAADACAxRDQNABQKAAzQFAYaBiG6GAAGEaRYgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzX" +
	"IUBxAAqXZZFUaKAgOMJDTLBAzUTCQbR7HiQYyBeCQOo+VoaSACEIlAZJRjoOo5DJGGQILlQJqyYrpaAxIgkEJuTqGoQaXgle53PJeLpXW5Nez9P7AMBwK7bbaqeTyXa+" +
	"eDtJhif4cXjIMhyLI8UxXEKOL7jDSYPgqK48QhCEJQPQ9EyXJqnahoemCeRXBZ+aqxbBsCwCep0YBeNr3HaNaz3PK/brtWxMDpeA5IYhhF7WdZFR4tMrOdAtHL9FyPJ5" +
	"TFicgXnoTAKAsRpHPeVhrAUd4LkmY5yj+fQ+i8L4zk+Y5vjCe4oD6ZoNhSRxiisVRKg+T5vnWfB6h6J5yAIf4fieWJFHyHZHHSTAygyAociMKBKEKBIeCiCZyHYFAnCA" +
	"B4mBeBQJlgRIegOCgYCySAgh2WAkgINAMmMNIgCcCYoGYLoLmKaIshqCgMliEICgmDRDEiUQmkmAhWDCD5inicIVg4TQYloJg2g2ExYhoJZJEidIThMCQSFyEwkGKaRK" +
	"FEJQJBkOhLCUJIDFoRiKBmBJhDeDZZDoPAlgmQhghaGZimmHhphqZopDoYw3GYEgFgGHROGOFJkCSSQCDoTAkiSaQ6C6IBJFkPIUCSJ5CDoeQ5CcVZ5gWHROmONJsCMS" +
	"ISByEFyjIRoYiaKYaG6HonEiOhcguJQIHoRJsh0WBWB2JIpiqShKi0OwqnqRouiyTpGhGBxiYIZKOhqGp2j4aRaAqZL3FAECAgA==");
_ObjectCallMethod(grid, "ExecuteTemplate", "Background(33) = 16777216");
_ObjectCallMethod(grid, "ExecuteTemplate", "Background(34) = 33554432");
_ObjectCallMethod(grid, "ExecuteTemplate", "Background(37) = 65536");
_ObjectCallMethod( grid , "EndUpdate");

911
How can I sort by two-columns, one by date and one by time

OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "SingleSort", 0);
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "Index") , "FormatColumn", "1 index ``");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "Date") , "SortType", 2);
	column = _ObjectCallMethod( columns , "Add", "Time");
		_ObjectSetProperty( column , "SortType", 4);
		_ObjectSetProperty( column , "FormatColumn", "time(value)");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", 0);
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = #1/1/2001#");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = #1/1/2001 10:00:00 AM#");
	h = _ObjectCallMethod( items , "AddItem", 0);
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = #12/31/2000#");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = #1/1/2001 10:00:00 AM#");
	h = _ObjectCallMethod( items , "AddItem", 0);
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = #1/1/2001#");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = #1/1/2001 6:00:00 AM#");
	h = _ObjectCallMethod( items , "AddItem", 0);
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = #12/31/2000#");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = #1/1/2001 8:00:00 AM#");
	h = _ObjectCallMethod( items , "AddItem", 0);
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = #1/1/2001#");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = #1/1/2001 8:00:00 AM#");
	h = _ObjectCallMethod( items , "AddItem", 0);
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = #12/31/2000#");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = #1/1/2001 6:00:00 AM#");
_ObjectSetProperty( grid , "Layout", "multiplesort=^"C1:1 C2:1^"");
_ObjectCallMethod( grid , "EndUpdate");

910
How can I display a context menu

// MouseUp event - Occurs when the user releases a mouse button.
FUNCTION gridEvents_MouseUp(OBJECT grid, INT Button, INT Shift, INT X, INT Y)
	OBJECT createobject("exontrol.contextmenu");
	createobject("exontrol.contextmenu") = CreateObject("Exontrol.ContextMenu");
		_ObjectSetProperty( _ObjectGetProperty( createobject("exontrol.contextmenu") , "Items") , "ToString", "Check[chk],[sep],Item 1,Item 2,Item 3");
		Message( _ObjectCallMethod( createobject("exontrol.contextmenu") , "Select", ) );
END

OBJECT grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
_ObjectSetProperty( grid , "ScrollBySingleLine", -1);
_ObjectSetProperty( grid , "ContinueColumnScroll", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "ReadOnly", -1);

909
Also, are there any plans on the ability to put borders on individual cells or rows or columns

OBJECT appearance,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
appearance = _ObjectGetProperty( grid , "VisualAppearance");
	_ObjectCallMethod( appearance , "Add", 1,"gBFLBCJwBAEHhEJAAChABOUGACAADACAxRDQNABQKAAzQFAYbBkGqGAAGIYxYgmFgAQhFcZQSpEEg7BKMYwjOJgFgmEQxDANIBQSKoaQiGQYRhkEYgEiONoaDJCM4wH" +
	"IMQxHCKTZRkGYpajOPobUbGUywHRcRRvH6EZQGWg6GjqK43SCEEZhJBNGyTJ6BZbGURbCqSLAwWZAYy2RCMRxDJqLKypSwKPoGKosS5OUwzHItaRtHaJJAwKZ6ApGQpR" +
	"VTAYxVfC1PzkACma4nS7oXraVJFVZTdYwTh+JABTzGLpnKw7FhGa5pABpdq0RTuOZdAbPMoyXBrXqqB46UCOGg5HRWWwHR7ZIquap9JzfCq5cRbWr5BBOPaBYKwdD1CB" +
	"+iMVRnlQRY4hafZwAMH5Pl4XQnjCEBECSIBpDGHQOicIwtBIBpmiWEIJj6eJQloEgomafgyGGCI6kKYZQH+igGAKAJgEgFgGgGYIFlCf4CmCSA2A6A5hAgRgEgQYRIFY" +
	"FIEmEaBmBmBghigdgQgcIZogYC4ICIKB6CSCRhiiHgogWIooi4F4AmKaIaDCDBihiTg0gsIIYmYOoOmOSJ2D6AZQBAgI=");
	_ObjectCallMethod( appearance , "Add", 2,"gBFLBCJwBAEHhEJAAChABdUIQAAYAQGKIaBoAKBQAGaAoDDYMg1QwAAxDGLEEwsACEIrjKCVIgkHYJRjGEZxNCMIhiGAaQChEZYHgkMomDAOEgyHKcEgJGyEQgkOa4a" +
	"jCKYrSzAcrwTI4cRVHiQZygOZ4DBSOY8VBAcQweItJhrKqVRgriitNQjCyjZCpOaIDooAJmRZNNISBBIEQSKA0TDOQ5TSKUMYhOZTBBEbbMNBtBIUIRpajbMBiFywUxU" +
	"OJYXhmG4dR7IMhyLI8UxXFo7P7mOZZXjmO49T7Kc70LQ9CyHJKnabpWoaXj2VZZV7Mda2DTNSzPKK1bZpG4bTouKZ5WjfN72fgeCzrF7HchyPJcXxnG4ZAMBA");
	_ObjectCallMethod( appearance , "Add", 3,"gBFLBCJwBAEHhEJAAChABL0GACAADACAxRDQNABQKAAzQFAYbBkGqGAAGIYxYgmFgAQhFcZQSpEEg7BKMYwjOJgEgmEQxDANIBQSKoaQiGQYRhkEYpFiONoXDJCM4wH" +
	"IMQxHCKTZRkGYpajOPobUbGUygBRdExvEyEZQGWg6GjqK43SCEEZhJBNGyfH6dBpEWT7ChENQwWLLFoRDIcQyXCytIDter4boGKosS5OUwzGAtaRvHaJJAwKZ6ApGQpR" +
	"VTAYxUdC1HTjJiEa4nS7oXraVJFVZTdYwTh+JABTzGKbsSycKqWaqkABZeoWbTuOZdAbPMoyXBrXgOLYzUCOGg5HRWWwHR7ZIq0Pg9Hqaa4bVbIVxbcAGH6BQa6J5hEB" +
	"ECSIBpDGHQOicIwtBIBpmhqEIJj2eJQloEgokiegyGGCI6kKZ5BnefA+D8L4flOa52nufg+g+f5fnPFB/ooBZ1omSAWASAJgGgJgJgIIIoDYAIDCCaBFnuBAhCgOgUgU" +
	"YIoF4GIBiGKBuAcfohmgNgdggX54g4JB/F+GImCqCpikiNguguUAQICA=");
	_ObjectCallMethod( appearance , "Add", 4,"gBFLBCJwBAEHhEJAAChABBUGACAADACAxRDQNABQKAAzQFAYbBkGqGAAGIYxYgmFgAQhFcZQSpEEg7BKMYwjOJgCgmEQxDANMiwGKoaQiGQYRhkEYgFiONoaDJCM4wH" +
	"IMQxHCKTZRkGYpajOPobUbAYQQSAkEgpECbZqoEZaDoaOorTZINJ0VR1Ox5KKfZyGURZPqOEQ1DBZEI2RZUbxDJquLhACj7AjeZZtRJZVp2TY9eQ3LC3aYhGqwAwSFpJ" +
	"VjUEBgRBJIDSMY6DpOIxaEgNZpwEITOTxUK0EhRLy5agDCJ1QrCdanahqOpaXpmW5dV7YNh2LTnfzXNq3bhuO5bXqOd59X7fN54Dg+D4LRLHbpxXIcXqvFaZZDnOb4To" +
	"PEuAZUmqcB2B2DoHGuN5Tm6d46lsPwfhOS5mnOeg9DqCAIICA");
_ObjectSetProperty( grid , "LinesAtRoot", 1);
_ObjectSetProperty( grid , "SelBackColor", _ObjectGetProperty( grid , "BackColor"));
_ObjectSetProperty( grid , "SelForeColor", _ObjectGetProperty( grid , "ForeColor"));
_ObjectSetProperty( grid , "DefaultItemHeight", 22);
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "");
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Add(``).Def(4) = 33554432");
_ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Root 1");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemBackColor(h) = 16777216");
	hx = _ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.SplitCell(h,0)");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,hx")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", hx)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(0,hx) = `count(current,dir,1)`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(0,hx) = 4");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(0,hx) = `'Childs: ' + value`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellBackColor(0,hx) = 50331648");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellHAlignment(0,hx) = 1");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 1");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 2");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ExpandItem(h) = True");
	h = _ObjectCallMethod( items , "AddItem", "Root 2");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemBackColor(h) = 67108864");
	hx = _ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.SplitCell(h,0)");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,hx")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", hx)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(0,hx) = `count(current,dir,1)`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(0,hx) = 4");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(0,hx) = `'Childs: ' + value`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellBackColor(0,hx) = 50331648");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellHAlignment(0,hx) = 1");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 1");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 2");
	_ObjectCallMethod( items , "InsertItem", h,"","Child 3");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemBackColor(InsertItem(h,,`Child 4`)) = 67108864");
_ObjectCallMethod( grid , "EndUpdate");

908
How can I decode the Layout property
OBJECT columns,createobject("exontrol.print"),grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectCallMethod( columns , "Add", "C1");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "C2") , "Position", 1);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`SubItem 1.1`),1) = `SubItem 1.2`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`SubItem 2.1`),1) = `SubItem 2.2`");
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(`C2`).SortOrder = 2");
_ObjectCallMethod( grid , "EndUpdate");
Message( "Encoded:" );
Message( _ObjectGetProperty( grid , "Layout") );
createobject("exontrol.print") = CreateObject("Exontrol.Print");
	_ObjectCallMethod(grid, "TemplatePut", "Dim creObj")
	_ObjectCallMethod(grid, "TemplatePut", createobject("exontrol.print"))
	Message( "Decoded: " );
	Message( _ObjectCallMethod(grid, "ExecuteTemplate", "creObj.Decode64TextW(Me.Layout)") );

907
No new line is shown if using <br> tag. How can I show a new line with-in the cell

OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ScrollBySingleLine", -1);
_ObjectSetProperty( grid , "DrawGridLines", -2);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Single-Line");
	_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
	_ObjectCallMethod(grid, "TemplatePut", column)
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(16) = True");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Multiple-Lines");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(16) = False");
	_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(17) = 1");
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(AddItem(`First-Line<br>Second-Line`),1) = `First-Line<br>Second-Line`");
	h = _ObjectCallMethod( items , "AddItem", "First-Line<br>Second-Line<br>Third-Line");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellSingleLine(h) = False");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellHAlignment(h,0) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(h) = 0");
_ObjectCallMethod( grid , "EndUpdate");

906
I am using exCRD to layout the columns in the grid, but is there a way where I can have the text in a cell wrap if it's exceeds the width of the cell instead of showing the ...'s

OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "DrawGridLines", -2);
_ObjectSetProperty( grid , "DefaultItemHeight", 36);
_ObjectSetProperty( grid , "FullRowSelect", 0);
columns = _ObjectGetProperty( grid , "Columns");
	column = _ObjectCallMethod( columns , "Add", "Column1");
		_ObjectSetProperty( column , "Visible", 0);
		_ObjectSetProperty( _ObjectGetProperty( column , "Editor") , "EditType", 1);
	column = _ObjectCallMethod( columns , "Add", "Column2");
		_ObjectSetProperty( column , "Visible", 0);
		_ObjectSetProperty( _ObjectGetProperty( column , "Editor") , "EditType", 1);
	column = _ObjectCallMethod( columns , "Add", "Column3");
		_ObjectSetProperty( column , "Visible", 0);
		_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
		_ObjectCallMethod(grid, "TemplatePut", column)
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(16) = False");
		_ObjectSetProperty( _ObjectGetProperty( column , "Editor") , "EditType", 1);
	column = _ObjectCallMethod( columns , "Add", "Column4");
		_ObjectSetProperty( column , "Alignment", 1);
		_ObjectSetProperty( column , "HeaderAlignment", 1);
		_ObjectSetProperty( column , "Visible", 0);
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(2) = True");
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(3) = True");
	column = _ObjectCallMethod( columns , "Add", "FormatLevel");
		_ObjectSetProperty( column , "FormatLevel", "(0/1),^"Information to be shown on the control's header^"[a=17][ww]:128,3:128");
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(32) = `(0/1),2[a=17][ww]:128,3:128`");
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Cell 1.1");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = `Cell 1.2`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = `This is just a bit of information on first row`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,3) = `Cell 1.4`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellSingleLine(h,3) = False");
	h = _ObjectCallMethod( items , "AddItem", "Cell 2.1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,1) = `Cell 2.2`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = `This is just a bit of information on second row`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,3) = `Cell 2.4`");
_ObjectCallMethod( grid , "EndUpdate");

905
How can I load pictures using URL ( http:// )
OBJECT grid;

grid =  ObjectByName("AN1") ;
http = CreateObject("Exontrol.HTTP");
_ObjectSetProperty( grid , "PictureDisplay", 34);
_ObjectCallMethod(grid, "TemplatePut", "Dim httObj")
_ObjectCallMethod(grid, "TemplatePut", http)
_ObjectSetProperty( grid , "Picture", _ObjectCallMethod(grid, "ExecuteTemplate", "httObj.GETImage(`http://mail.exontrol.com/images/exontrol.png`)"));

904
How can I filter programmatically by multiple columns
OBJECT column,columns,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
columns = _ObjectGetProperty( grid , "Columns");
	_ObjectCallMethod( columns , "Add", "Name");
	column = _ObjectCallMethod( columns , "Add", "Active");
		_ObjectCallMethod(grid, "TemplatePut", "Dim colObj")
		_ObjectCallMethod(grid, "TemplatePut", column)
		_ObjectCallMethod(grid, "ExecuteTemplate", "colObj.Def(0) = True");
		_ObjectSetProperty( column , "DisplayFilterButton", -1);
	_ObjectCallMethod( columns , "Add", "Type");
	_ObjectSetProperty( _ObjectCallMethod( columns , "Add", "Mode") , "FilterType", 240);
items = _ObjectGetProperty( grid , "Items");
	h = _ObjectCallMethod( items , "AddItem", "Item A");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,h")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "TemplatePut", h)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellState(h,1) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = `A`");
	h = _ObjectCallMethod( items , "AddItem", "Item B");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellState(h,1) = 0");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = `B`");
	h = _ObjectCallMethod( items , "AddItem", "Item C");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellState(h,1) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = `C`");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,3) = `None`");
	h = _ObjectCallMethod( items , "AddItem", "Item D");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellState(h,1) = 1");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(h,2) = `C`");
column = _ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(1)");
	_ObjectSetProperty( column , "FilterType", 6);
	_ObjectSetProperty( column , "Filter", 1);
column = _ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(2)");
	_ObjectSetProperty( column , "FilterType", 240);
	_ObjectSetProperty( column , "Filter", "C");
column = _ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(3)");
	_ObjectSetProperty( column , "FilterType", 2);
_ObjectCallMethod( grid , "ApplyFilter");
_ObjectCallMethod( grid , "EndUpdate");

903
How can I add Right-To-Left Reading-Order / RTL Layout
OBJECT column,grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "TreeColumnIndex", -1);
column = _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "RTL - Header Caption");
	_ObjectSetProperty( column , "HeaderAlignment", 131074);
	_ObjectSetProperty( column , "Alignment", 131074);
_ObjectSetProperty( grid , "FullRowSelect", 0);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "RTL - Text Right");
	_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj")
	_ObjectCallMethod(grid, "TemplatePut", items)
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellHAlignment(AddItem(`RTL - Text Center`),0) = 131073");
	_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellHAlignment(AddItem(`RTL - Text Left`),0) = 131072");
_ObjectCallMethod( grid , "EndUpdate");

902
I have applied ebn to the grid using the following code, and noticed that it applies to the filter dropdownList too. Is there a way to prevent this behavior, like keeping the Filter dropdownlist intact

OBJECT grid,items;

grid =  ObjectByName("AN1") ;
_ObjectCallMethod( _ObjectGetProperty( grid , "VisualAppearance") , "Add", 1,"c:\exontrol\images\normal.ebn");
_ObjectSetProperty( grid , "Appearance", 16777216);
_ObjectSetProperty( grid , "BackColorHeader", 16777216);
_ObjectCallMethod(grid, "ExecuteTemplate", "Background(26) = -2147483633");
_ObjectSetProperty( _ObjectCallMethod( _ObjectGetProperty( grid , "Columns") , "Add", "Filter") , "DisplayFilterButton", -1);
items = _ObjectGetProperty( grid , "Items");
	_ObjectCallMethod( items , "AddItem", "Item 1");
	_ObjectCallMethod( items , "AddItem", "Item 2");

901
The tree lines from the group parent to its children are missing and no identation is present: the parent and all its children are on the same offset from left. What canbe done

// AddGroupItem event - Occurs after a new Group Item has been inserted to Items collection.
FUNCTION gridEvents_AddGroupItem(OBJECT grid, INT Item)
	OBJECT items;
	items = _ObjectGetProperty( grid , "Items");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,Item")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", Item)
		nGroupColumn = _ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.GroupItem(Item)");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.ItemDivider(Item) = -1");
		_ObjectCallMethod(grid, "TemplatePut", "Dim iteObj,Item,nGroupColumn")
		_ObjectCallMethod(grid, "TemplatePut", items)
		_ObjectCallMethod(grid, "TemplatePut", Item)
		_ObjectCallMethod(grid, "TemplatePut", nGroupColumn)
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.FormatCell(Item,0) = FormatCell(Item,nGroupColumn)");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValue(Item,0) = Me.Columns.Item(nGroupColumn).GroupByTotalField");
		_ObjectCallMethod(grid, "ExecuteTemplate", "iteObj.CellValueFormat(Item,0) = CellValueFormat(Item,nGroupColumn)");
END

OBJECT column,grid,rs;

grid =  ObjectByName("AN1") ;
ObjectAssociateEvents("gridEvents", grid);
_ObjectCallMethod( grid , "BeginUpdate");
_ObjectSetProperty( grid , "ReadOnly", -1);
_ObjectSetProperty( grid , "ColumnAutoResize", 0);
rs = CreateObject("ADOR.Recordset");
	_ObjectCallMethod( rs , "Open", "Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access\misc.accdb",3,3);
_ObjectSetProperty( grid , "DataSource", rs);
_ObjectSetProperty( grid , "SortBarVisible", -1);
_ObjectSetProperty( grid , "SortBarCaption", "Drag a <b>column</b> header here to group by that column.");
_ObjectSetProperty( grid , "AllowGroupBy", -1);
column = _ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(0)");
	_ObjectSetProperty( column , "AllowGroupBy", 0);
	_ObjectSetProperty( column , "Width", 96);
_ObjectCallMethod(grid, "ExecuteTemplate", "Columns.Item(1).SortOrder = 1");
_ObjectSetProperty( grid , "LinesAtRoot", -1);
_ObjectCallMethod( grid , "EndUpdate");